• ベストアンサー

エクセル マクロを自動実行

仕事で使っている書式で、A1に「あいうえお」と入力すると、A2「あ」、B2「い」、C2「う」、D2「え」、E2「お」とMID関数で振り分け、入力後、A行を「表示しない」と「再表示」するマクロをボタンで実行するようにしています。 そこで、 この書式には必ず入力しなければならない項目があるので(非表示しない行のセル)、この項目に入力したら行の非表示マクロを実行し、空白なら行の再表示マクロを実行出来るようにしたくて調べているのですが見つかりません。 1クリックの手間を省く方法をご存知の方ご教示ください。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.3

記録マクロで作られた物ですね。 下記のようにしてください。 Sub とじるよ() Range("25:25,32:32,38:38,45:45,52:52,59:59,66:66,70:70,74:74,78:78,85:85") _ .EntireRow.Hidden = True Range("AL15:CE16").Select'選択不要ならこの行を削除 End Sub Sub ひらくよ() Rows("21:87").EntireRow.Hidden = False Range("AL15:CE16").Select'選択不要ならこの行を削除 End Sub '上記は標準モジュール '下記はシート用のモジュールに入れてください。 Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False If Target.Address = "$A$1" Then If Target.Value = "" Then Call ひらくよ Else Call とじるよ End If End If Application.EnableEvents = True End Sub

kanjukukaki
質問者

お礼

記録マクロというのですか。 ずいぶん長いコードだったのがすんごく短くなったのにしっかり結果が出て、すごいです。 別の書式では、列を非表示にする記録マクロをつくって実行したところ結合したセルまで非表示になってしまって諦めていたのですが、最初に教えていただいたコードではそのようなことがなく使えるのでどちらも使わせていただきます。 ありがとうございました。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。Wendy02です。 こんな風にしたらどうかな? ただし、$A$1などが複数存在している場合は、 Application.EnableEvents のコメントを外してください。 Private Sub Worksheet_Change(ByVal Target As Range) Dim ur As Range Dim flg As Boolean  ''ここを設定↓  If Target.Address <> "$A$1" Then Exit Sub  'Application.EnableEvents = False  If Target.Value <> "" Then  flg = True  Else  flg = False  End If  rngRows ur  ur.EntireRow.Hidden = flg  Range("AL15:CE16").Select  'Application.EnableEvents = True End Sub Private Function rngRows(ur As Range) Dim myRows As Variant Dim r As Variant  myRows = Array(25, 32, 38, 45, 52, 59, 66, 70, 74, 78, 85)  For Each r In myRows  If ur Is Nothing Then   Set ur = Rows(r)  Else   Set ur = Union(ur, Rows(r))  End If Next r End Function

kanjukukaki
質問者

お礼

ほんとうにすごいです。 要求どおりの結果が出ました。しっかり使わせていただきます。 VBAは神の領域でしたがこれを期に少し勉強してみようかな。 ありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 私は、設問を何度も何度も読み返してみましたが、意味が良くわかりません。 それとも、私の読み違えなのかもしれません。 >入力後、A行を「表示しない」と「再表示」するマクロ >A2「あ」、 「A行」? 「A列」振り分けた、文字列まで、表示しないのですか? >この項目(=A1のことだろうと思います)に入力したら行の非表示マクロを実行し、 >空白なら行の再表示マクロを実行出来るようにしたくて & >1クリックの手間を省く方法をご存知の方ご教示ください。 非表示にする側はA1に入れるから、そのイベントのトリガーになるものは分るけれども、A1(または、2行目)が「空白なら、行の再表示」という状態-非表示になったものに対して、再表示させるためのトリガーは分らないですね。(まったく出来ないわけではないけれども、特殊なコードになります。) 通常は、ワークシートのアクション(動作)に対して、トリガーになるのですから、A1の文字を消去した、というなら、ロジックは成り立ちますが、元を非表示にしたり、その消えている状態では、ロジックが成り立たないと思います。もちろん、シートをActivateしたというものに対しては、トリガーになりますが、そうすると、条件とは違ってきます。どこか、設問に間違いがあるのではないでしょうか? 1クリックの手間と言っても、結局は、何かに組み合わせるだけのことなのですね。その元がなくなったら、どうしようもありませんし、目の前から消えたものに対しては、動作しないわけです。   A    B     C    D    E 1 あいうえお 2 あ    い    う    え   お   ↑   この列が非表示になると、残るものは、B2,C2,D2,E2 になります。A1,A2を非表示にするのですか?

kanjukukaki
質問者

補足

書き方を間違っていました 「列」ではなく「行」でした。 実際には、 Sub とじる1() Rows("25:25").Select ActiveWindow.SmallScroll Down:=6 Range("25:25,32:32,38:38").Select Range("A38").Activate ActiveWindow.SmallScroll Down:=6 Range("25:25,32:32,38:38,45:45").Select Range("A45").Activate ActiveWindow.SmallScroll Down:=9 Range("25:25,32:32,38:38,45:45,52:52").Select Range("A52").Activate ActiveWindow.SmallScroll Down:=6 Range("25:25,32:32,38:38,45:45,52:52,59:59").Select Range("A59").Activate ActiveWindow.SmallScroll Down:=12 Range("25:25,32:32,38:38,45:45,52:52,59:59,66:66").Select Range("A66").Activate ActiveWindow.SmallScroll Down:=6 Range("25:25,32:32,38:38,45:45,52:52,59:59,66:66,70:70,74:74").Select Range("A74").Activate ActiveWindow.SmallScroll Down:=12 Range("25:25,32:32,38:38,45:45,52:52,59:59,66:66,70:70,74:74,78:78,85:85"). _ Select Range("A85").Activate ActiveWindow.SmallScroll Down:=3 Selection.EntireRow.Hidden = True ActiveWindow.SmallScroll Down:=-69 Range("AL15:CE16").Select End Sub と Sub ひらく1() ActiveWindow.SmallScroll Down:=3 Rows("21:87").Select Selection.EntireRow.Hidden = False Range("AL15:CE16").Select End Sub をボタンで実行しています。 これを「A1」(仮)に入力すると「とじる」、空白なら「ひらく」にしたいのです。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

シートタブを右クリックして「コードの表示」で開いた画面に下記を記入してください。 Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False 'スイッチに使うセル名を絶対参照($A$1)で記入 If Target.Address = "$C$3" Then If Target.Value = "" Then 'セルが空白の場合、A列を表示 Columns("A:A").EntireColumn.Hidden = False Else Columns("A:A").EntireColumn.Hidden = True End If End If Application.EnableEvents = True End Sub

kanjukukaki
質問者

補足

ご回答有難うございます。 書き方を間違っていたので訂正します。 「列」ではなく「行」でした。 実際には、 Sub とじる1() Rows("25:25").Select ActiveWindow.SmallScroll Down:=6 Range("25:25,32:32,38:38").Select Range("A38").Activate ActiveWindow.SmallScroll Down:=6 Range("25:25,32:32,38:38,45:45").Select Range("A45").Activate ActiveWindow.SmallScroll Down:=9 Range("25:25,32:32,38:38,45:45,52:52").Select Range("A52").Activate ActiveWindow.SmallScroll Down:=6 Range("25:25,32:32,38:38,45:45,52:52,59:59").Select Range("A59").Activate ActiveWindow.SmallScroll Down:=12 Range("25:25,32:32,38:38,45:45,52:52,59:59,66:66").Select Range("A66").Activate ActiveWindow.SmallScroll Down:=6 Range("25:25,32:32,38:38,45:45,52:52,59:59,66:66,70:70,74:74").Select Range("A74").Activate ActiveWindow.SmallScroll Down:=12 Range("25:25,32:32,38:38,45:45,52:52,59:59,66:66,70:70,74:74,78:78,85:85"). _ Select Range("A85").Activate ActiveWindow.SmallScroll Down:=3 Selection.EntireRow.Hidden = True ActiveWindow.SmallScroll Down:=-69 Range("AL15:CE16").Select End Sub と Sub ひらく1() ActiveWindow.SmallScroll Down:=3 Rows("21:87").Select Selection.EntireRow.Hidden = False Range("AL15:CE16").Select End Sub をボタンで実行しています。 これを「A1」(仮)に入力すると「とじる」、空白なら「ひらく」にしたいのです。 ご回答いただいたコードを行に変えてやってみます。

関連するQ&A

  • エクセルでマクロを自動的に実行

    表題の通りなんですが、エクセルで、あるセルに指定された数値(語句)が入った場合に、それを自動的に感知して実行するマクロがあればと思うのですが、そういったことってできるのでしょうか。 具体的には、  1、バーコードリーダーで数値をセルに入力  2、その数値に対応する名前をvlookup関数にて表示  3、その名前が入力された時点でマクロが自動的に実行 と言うものです。  3の部分がよく分からずに困っています。できるかどうか分かりませんが、もしできるようであるならその方法を教えていただければありがたいです。どうか、よろしくお願いします。

  • Excel 空白行を上に詰めるマクロ

    関数を使用して、sheet1からsheet2に必要なデータを抜き取りました。 sheet2のセルには関数が入っています。 sheet2の抽出データには1行単位(まれに2~3行続けて)空白が発生します。 この行を削除し、かつ上に詰めて表示をしたいのですが、下記の条件で実行可能でしょうか? (例) sheet1 ⇒ sheet2   A   B   C     A  B  C 1 あ  い  う   1 あ  い  か 2        か   2 (空白行) 3 き  く   け    3 き  く  し   4 こ  さ   し   4 (空白行) ●2行目、4行目を削除し、且つ5行目以降に入力されている関数は削除したくない ●空白行削除のマクロは自動?(sheet1のデータを変更したら)で実行できるようにしたい よろしくお願いします。

  • Excelでマクロを使用して、列を表示させる質問です。

    Excle2003での質問です。 C3セルからAE78セルまでにデータが入力されています。 C列には項目名・3行には氏名が並んでいます。 D4セルからAE78セルには、 各人に対応する項目に○や△等が記入されています。 (空白セルもあります) A1セルに氏名を記入して(3行目のリストから選択して)、 マクロを実行させると、 1.氏名を一致する氏名の列のみを表示して、 2.オートフィルタで空白以外の行を表示する。 (ただしC列の項目名は表示されたまま) このようなマクロを組みたいのですが、 初心者の私ではまったく分かりませんでした。 どなたかご教授いただけたらと思います。 よろしくお願いいたしますm(_ _)m

  • マクロの自動実行

    教えてください。 A1のセルの内容ををドロップダウンで選択するようにしてあります。 A1の内容によってB1のセルの内容を変更させたいと思っています。 通常はvlookup関数で対応するものを呼び出せばいいのですがB1セルに手動で入力することもあるので関数を書き込んで置けません。 そこでA1セルをドロップダウンで変更したときに自動でマクロ「変更」を実行して、C1セルにvlookupで呼び出してる内容をB1セルへ貼り付けできないでしょうか? よろしくお願いいたします。

  • 【エクセル】マクロの自動実行

    エクセル2003を使用しています。 例)セルH4に名前が入力された時に、 今まで「Ctrl + Q」で起動していたマクロを自動実行 出来るようにしたいのです。 上記のような動きをしてくれ関数ないしマクロを知っている方が 居ましたら教えてもらえないでしょうか?

  • エクセル2003 でアンケート入力を作成したい

    添付のような書式で 項目1(B3セル)から項目5(B7セル)までを手入力して、「実行」みたいなボタンを押すと、E17セルからI17セルへ入力されるようにしたいです。 また、次データを入力する際に、「B2セル」に自動で最上の空白行の数値を持ってくる事はできますか? マクロ?でできるらしいのですが、マクロがよくわかりません。。。 詳しい方、素人でもわかるようなアドバイス頂けたらうれしいです。 よろしくお願いします

  • エクセル マクロ 入力制限について

    検索で探したのですが、うまくヒットしないため、質問させていただきます。 エクセルのセル入力制限についての質問です。 D1セルが空白でなかったら、A1・B1・C1に入力できないようにする と言う条件です。 それを、D1セルだけでなく、行すべてに適用したいのですが、 (D2 に入力されていたら、A2・B2・C2を入力できなくする) マクロで処理できるでしょうか? マクロ実行は、オープンしたときに実行するようにしたいと考えております。 ご教授お願いします。

  • マクロの実行について

    エクセルで料金計算をする、セル1Aに開始時刻を入力しセル1Bに終了時刻を入力するとセル1Cに料金が出力されるというマクロファイルを作りました。 現状1Aと1Bを入力しマクロ実行のスイッチを押して1Cを出力する、というやり方をしているのですが、スイッチを押す手間を省くために、1Aを入力しておいて1Bを入力したらスイッチを押さなくても自動的に1Cが出力されるようにしたいと考えています。 そのような設定をすることはできますか? ご回答よろしくお願い致します。

  • エクセルのマクロ

    エクセル2013です。セルA1に 1を入力すると○ 2を入力すると△ 3を入力すると□ 4を入力すると× 空白のときは◎ を表示するようにするマクロはどうすればいいでしょうか?  

  • エクセルでのセル自動クリア

    こんにちは。エクセル2000の質問です。 特定セル(以後項目セル)の入力を消した時に、関連するすべてのセル(同じ行のセル)の入力を自動的に消したいのです。 関数で自動的に計算するセルは、項目セルがブランクだったら時は「0」になるようにし、ユーザー定義で0を非表示にすることはできています。 入力する人が記入する箇所のみ、項目セルの入力を消すことでクリアしたいのです。 できればマクロを使わずに実現したいのですが、できますか? マクロ以外では不可能の場合はマクロでどうしたらよいでしょうか? よろしくお願いいたします。

専門家に質問してみよう