• ベストアンサー

エクセル 値入力にマクロ自動実施方法

 エクセル2003にて、ある箇所のセルに値が入力されたら所定のマクロが実施されるようにする事はできないものでしょうか? 例)  A1 に値が入力されていたら 1 というマクロと連動 A2 に値が入力されていたら 2 というマクロと連動 A3 に値が入力されていたら 3 というマクロと連動 A4 に値が入力されていたら 4 というマクロと連動  A1~A4 になにも無かったら 5 というマクロと連動  (A1~A4に同時に値が入力される事はありません)      としたいのですが、可能なのであれば方法を教えてください。

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

No2 merlionXXです。 > 区切り位置を実行すると > コピーまたは移動先のセルを置き換えますか? > と聞かれokにすると マクロが消された?のか起動してくれません。 区切り位置でデータが区切られて入力された場合、どうやらチェンジイベントが発生しないようですね。 ならば、区切り位置のマクロの最後にNo1さんのマクロをCallすればいいのではないでしょうか? Sub 区切り位置() 略 Call macro '(No1さんのマクロ) End Sub

tendon332
質問者

お礼

大変おそくなりすみません。ありがとうございました。 この方法でやります。

その他の回答 (2)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

質問の意図がマクロ実行時のセルの入力状態で分岐させたいということならばNo1さんのようなコードになると思います。 ただ、「マクロ自動実施方法」と書かれていますので、A1~A4に何か入力された、あるいは消去されたときに自動実行されるイベントドリブン型の意図であれば以下のようになると思います。 以下は、標準モジュールではなく該当するワークシートのシートモジュールに記入してください。 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A1:A4")) Is Nothing Then '変更が対象範囲内なら If Target.Count = 1 Then '変更したセルが1個なら If Target.Value <> "" Then '値の入力なら Select Case Target.Address(0, 0) '対象セルのアドレスにより分岐 Case "A1" Call macro1 Case "A2" Call macro2 Case "A3" Call macro3 Case "A4" Call macro4 End Select Else '値の消去であれば If Application.CountA(Range("A1:A4")) = 0 Then '対象範囲全部が空白なら Call macro5 End If End If Else '変更したセルが複数個なら If Application.CountA(Range("A1:A4")) = 0 Then '対象範囲全部が空白なら Call macro5 End If End If End If End Sub

tendon332
質問者

お礼

 ありがとうございます。 トライしてみます。結果は後ほど報告します。

tendon332
質問者

補足

 とりあえず テスト(直接値を入力すると)でうまくいきました。 最初で言っておけばよかったのですが別途問題が発生しました。   実際はA1:A4→G1:G4 になります。    B1:B4に値を入れ、区切り位置のマクロでG1:G4 のいずれかに値が入力させたかったのですが、区切り位置を実行すると  コピーまたは移動先のセルを置き換えますか? と聞かれokにすると マクロが消された?のか起動してくれません。  なにか方法はないものでしょうか? 下記は区切り位置のマクロです(マクロの記録でコピーしたものです) Sub 区切り位置() Columns("B:B").Select Selection.TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _ Semicolon:=True, Comma:=False, Space:=True, Other:=False, FieldInfo:= _ Array(1, 1), TrailingMinusNumbers:=True End Sub

  • kybo
  • ベストアンサー率53% (349/647)
回答No.1

以下のようにしてはどうでしょうか Sub macro() Dim R As Range Set R = Range("A1:A4").Find("*") If R Is Nothing Then Call macro5 Else Select Case R.Row Case 1 Call macro1 Case 2 Call macro2 Case 3 Call macro3 Case 4 Call macro4 End Select End If End Sub

tendon332
質問者

お礼

 ありがとうございます。 トライしてみます。

tendon332
質問者

補足

私のやり方が悪いのかもしれませんが値が入力された際に自動で起動しませんでした。

関連するQ&A