[OCN光]Twitterキャンペーン開催中!

エクセルVBA
シートモジュールにチェンジイベントを複数設定する方法を教えて下さい。

例えば、B列に「あり」と入力した場合、c列は空白、更にD列に日付を入力したらE列にはD列の日付の翌週の日付が入力されるといったものです。

私なりに調べて、select caseが使えそうだったんですが、列の指定の方法が、わかりません。
また…Worksheet_Change_1(ByVal…)と…Worksheet_Change_2(ByVal…)で記述する方法もあるみたいですが、上手く行きませんでした。
どなたか詳しい方ご教授頂ければと助かります。よろしくお願いします!

教えて!goo グレード

A 回答 (3件)

#1です。


>私なりに調べて、select caseが使えそうだったんですが、列の指定の方法が、わかりません。
失礼しました。列の指定の方法が、わかりません。でしたね。

#1で触れましたTargetを使います。
B列のセルを入力するとTarget.Columnは、2が返ります。列№ 2列目と言う意味ですね。
それをselect caseで振り分ければ良いので、下記のようにな感じで動くと思います。例の条件の >D列に日付を入力したらは、判定が必要になると思いますが、サンプルは、取敢えず日付になる8桁数値で動くようにしましたが変更が必要でしょう。

これだけでChangeを使われるのなら良いのですが、他にも色々処理されるようなら、Intersectメソッドなどでさらに処理を分ける必要があるかも知れません。
一例です。

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Select Case Target.Column
Case 2
If Target.Value = "あり" Then Target.Offset(, 1).Value = ""
Case 4
If IsDate(Format(CStr(Target.Value), "####/##/##")) = True Then
Target.Offset(, 1).Value = DateAdd("d", 7, Target.Value)
End If
End Select
Application.EnableEvents = True
End Sub
    • good
    • 0
この回答へのお礼

遅くなりすみません、、、。
詳しく教えていただきありがとうございます。列の指定はこんなにも簡単な事だったんですね!!
あれからこちらを参考に試してみてますが、どうもCase2、Case4まではうまく行ったんですが、case6と日付けの条件にを加えると上手くいきません、、、。

お礼日時:2020/10/26 06:13

こんなのはどうでしょう!!



Private Sub Worksheet_Change(ByVal Target As Range)
Call Worksheet_Change_1(Target)
Call Worksheet_Change_2(Target)
End Sub

Private Sub Worksheet_Change_1(ByVal Target As Range)
MsgBox Target.Address
End Sub

Private Sub Worksheet_Change_2(ByVal Target As Range)
MsgBox Target.Value
End Sub
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

Worksheet_Change_1(ByVal…)と…Worksheet_Change_2(ByVal…のパターンはcallを使うんですね!!知りませんでした!!こちらも試してみようと思います!

お礼日時:2020/10/26 06:15

こんにちは、


同じシートモジュールに複数のWorksheet_Changeを書くことは出来ません。
トリガーとなるRangeオブジェクト(Target)で処理を分けるようにします。
具体的には、Intersectメソッドを使う事が多いようですが

参考 http://officetanaka.net/excel/vba/tips/tips118.htm

ご質問の場合、単純に
If Target.Column=2 Then や Select Case Target.Column
で処理を分けても良いように思います。

また、内容によっては、Application.EnableEventsなどを設定して
無駄な処理をさせないようにします。

https://tonari-it.com/excel-vba-event-change-ena …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

教えて!goo グレード

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング