エクセル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で質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Excel(エクセル) エクセルで条件付き書式を使わずにセルの文字の色を変える方法を教えて下さい 8 2023/07/28 01:15
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- Excel(エクセル) エクセルのイベントVBAを複数のシートで動かしたい 1 2022/12/07 16:55
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) excelにて、特定の列に数字入力してあれば、入力してある行コピーして 別ファイルに張り付ける 2 2022/08/11 05:33
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
エクセル イベントマクロ Changeイベントを複数作りたい
Access(アクセス)
-
Excel VBA イベントプロシージャを2つ記述する(基本です)
Excel(エクセル)
-
EXCEL VBA 複数のシートに同じイベントプロシジャを書く場合
Excel(エクセル)
-
-
4
複数処理 Worksheet_Change(ByVal Target As Range)
Visual Basic(VBA)
-
5
同じシート内にイベントプロシージャが二つある時
Excel(エクセル)
-
6
Excel VBAでのWorksheet_Changeが動作しない原因
Excel(エクセル)
-
7
エクセルvba (ByVal Target As Range)について
Excel(エクセル)
-
8
Worksheet.Change イベントを他のシートにも反映させる方法?
Visual Basic(VBA)
-
9
Changeイベントでの複数セルのクリアの処理について
Visual Basic(VBA)
-
10
エクセルのマクロをセルの値に応じて自動起動したい
Visual Basic(VBA)
-
11
エクセルマクロPrivate Subを複数にする方法
Excel(エクセル)
-
12
VBA。複数のChangeイベントをまとめる方法
Visual Basic(VBA)
-
13
セルの値が変ると自動でマクロが実行される。
その他(Microsoft Office)
-
14
Private Sub Worksheet_Change が複数
Excel(エクセル)
-
15
Excel VBA あるセルでENTERを押すと特定のセルへ移動したい
Excel(エクセル)
-
16
EXCEL あるセルに数字が入力されれば既存マクロ実行させたい
Excel(エクセル)
-
17
特定セルの内容を更新したら、その更新日を自動的に表示する方法について
Excel(エクセル)
-
18
Worksheet_Changeの内容を標準モジュールから実行するには?
その他(プログラミング・Web制作)
-
19
worksheet_changeがループする
PowerPoint(パワーポイント)
-
20
他のシートの特定のセルが変わると、自動実行されるマクロについて
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vba 2つの条件が一致したら...
-
B列の最終行までA列をオート...
-
Worksheets メソッドは失敗しま...
-
【VBA】2つのシートの値を比較...
-
VBAでのリスト不一致抽出について
-
エクセル 2つの表の並べ替え
-
VBAを使って検索したセルをコピ...
-
VBAのFind関数で結合セルを検索...
-
エクセルVBA intersect colu...
-
マクロ 最終列をコピーして最終...
-
マクロについて。S列の途中から...
-
EXCEL VBA 条件に合致しない行...
-
エクセルVBAにて =A1=B1とすれ...
-
エラーコード1004
-
VBマクロ 色の付いたセルを...
-
【Excel VBA】カンマと改行コー...
-
URLのリンク切れをマクロを使っ...
-
VBAで指定範囲内の空白セルを左...
-
エクセルで最大列を増やす
-
vba 重複データ合算
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Cellsのかっこの中はどっちが行...
-
VBAのコードを教えてください
-
VBAを使って検索したセルをコピ...
-
B列の最終行までA列をオート...
-
エクセルvbaについて
-
vba 2つの条件が一致したら...
-
Excelで、あるセルの値に応じて...
-
VBA UserFormからの転記で
-
VBAのFind関数で結合セルを検索...
-
文字列の結合を空白行まで実行
-
IIF関数の使い方
-
VBA 何かしら文字が入っていたら
-
マクロ 最終列をコピーして最終...
-
Changeイベントでの複数セルの...
-
エクセルVBAにて =A1=B1とすれ...
-
【VBA】2つのシートの値を比較...
-
データグリッドビューの一番最...
-
VBマクロ 色の付いたセルを...
-
VBAで指定範囲内の空白セルを左...
おすすめ情報