
エクセルVBA
シートモジュールにチェンジイベントを複数設定する方法を教えて下さい。
例えば、B列に「あり」と入力した場合、c列は空白、更にD列に日付を入力したらE列にはD列の日付の翌週の日付が入力されるといったものです。
私なりに調べて、select caseが使えそうだったんですが、列の指定の方法が、わかりません。
また…Worksheet_Change_1(ByVal…)と…Worksheet_Change_2(ByVal…)で記述する方法もあるみたいですが、上手く行きませんでした。
どなたか詳しい方ご教授頂ければと助かります。よろしくお願いします!
No.2ベストアンサー
- 回答日時:
#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
遅くなりすみません、、、。
詳しく教えていただきありがとうございます。列の指定はこんなにも簡単な事だったんですね!!
あれからこちらを参考に試してみてますが、どうもCase2、Case4まではうまく行ったんですが、case6と日付けの条件にを加えると上手くいきません、、、。
No.3
- 回答日時:
こんなのはどうでしょう!!
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
ご回答ありがとうございます。
Worksheet_Change_1(ByVal…)と…Worksheet_Change_2(ByVal…のパターンはcallを使うんですね!!知りませんでした!!こちらも試してみようと思います!
No.1
- 回答日時:
こんにちは、
同じシートモジュールに複数の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 …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセル イベントマクロ Changeイベントを複数作りたい
Access(アクセス)
-
Excel VBAでのWorksheet_Changeが動作しない原因
Excel(エクセル)
-
Worksheet.Change イベントを他のシートにも反映させる方法?
Visual Basic(VBA)
-
-
4
Excel VBA イベントプロシージャを2つ記述する(基本です)
Excel(エクセル)
-
5
EXCEL VBA 複数のシートに同じイベントプロシジャを書く場合
Excel(エクセル)
-
6
Changeイベントでの複数セルのクリアの処理について
Visual Basic(VBA)
-
7
同じシート内にイベントプロシージャが二つある時
Excel(エクセル)
-
8
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
9
エクセルマクロPrivate Subを複数にする方法
Excel(エクセル)
-
10
複数処理 Worksheet_Change(ByVal Target As Range)
Visual Basic(VBA)
-
11
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
12
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
13
【Excel VBA】セルの値が変更されたらマクロを実行
その他(Microsoft Office)
-
14
VBA。複数のChangeイベントをまとめる方法
Visual Basic(VBA)
-
15
EXCELでセルの値が変化したときだけにマクロ実行
Excel(エクセル)
-
16
Calculateイベントでセルを指定したい
Word(ワード)
-
17
セルに入力するたびにマクロを実行する
Visual Basic(VBA)
-
18
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
19
特定のセルがアクティブになったときのイベント?
Excel(エクセル)
-
20
セルの値が変ると自動でマクロが実行される。
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
B列の最終行までA列をオート...
-
Cellsのかっこの中はどっちが行...
-
vba 2つの条件が一致したら...
-
IIF関数の使い方
-
【VBA】複数行あるカンマ区切り...
-
DataGridViewに空白がある場合...
-
VBAで、特定の文字より後を削除...
-
VBA 何かしら文字が入っていたら
-
URLのリンク切れをマクロを使っ...
-
エクセルで行を挿入し、小計、...
-
Changeイベントでの複数セルの...
-
C# dataGridViewの値だけクリア
-
VBAのFind関数で結合セルを検索...
-
VBAコンボボックスで選択した値...
-
targetをA列のセルに限定するに...
-
VBAを使って検索したセルをコピ...
-
■VBAで条件による行挿入方法
-
VBA キーと項目が重複する場合...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで、あるセルの値に応じて...
-
Worksheets メソッドは失敗しま...
-
Cellsのかっこの中はどっちが行...
-
vba 2つの条件が一致したら...
-
【VBA】2つのシートの値を比較...
-
B列の最終行までA列をオート...
-
IIF関数の使い方
-
URLのリンク切れをマクロを使っ...
-
VBAを使って検索したセルをコピ...
-
DataGridViewに空白がある場合...
-
VBA 何かしら文字が入っていたら
-
VBAのFind関数で結合セルを検索...
-
複数の列の値を結合して別の列...
-
VBAでのリスト不一致抽出について
-
データグリッドビューの一番最...
-
VBAで指定範囲内の空白セルを左...
-
rowsとcolsの意味
-
【Excel VBA】 B列に特定の文字...
-
VBAで、特定の文字より後を削除...
-
エクセル 2つの表の並べ替え
おすすめ情報