
No.3ベストアンサー
- 回答日時:
こんにちは
お邪魔します。
(1)まずはオーダー通りの基本型
Private Sub Worksheet_Change(ByVal Target As Range)
' ' 複数セルが変更された場合(単セルでない場合)は処理を抜ける
If Target.Count > 1 Then Exit Sub
' ' 変更されたセルが1列めでない場合は処理を抜ける
If Target.Column <> 1 Then Exit Sub
' ' 変更されたセルの行位置によって処理を分岐する
Select Case Target.Row
Case 1
' A1 の場合の処理
MsgBox "A1" ' 確認用(確認が済んだら当行削除)
Case 2
' A2 の場合の処理
MsgBox "A2" ' 確認用(確認が済んだら当行削除)
End Select
End Sub
(2)セルの位置によってもっと細かく分岐したい場合
Private Sub Worksheet_Change(ByVal Target As Range)
' ' 複数セルが変更された場合(単セルでない場合)は処理を抜ける
If Target.Count > 1 Then Exit Sub
' ' 変更されたセルの 列位置 によって処理を分岐する
Select Case Target.Column
Case 1 ' 1列めなら
' ' 変更されたセルの 行位置 によって処理を分岐する
Select Case Target.Row
Case 1 ' 1列め の 1行め なら
' A1 の場合の処理
MsgBox "A1" ' 確認用(確認が済んだら当行削除)
Case 2 ' 1列め の 2行め なら
' A2 の場合の処理
MsgBox "A2" ' 確認用(確認が済んだら当行削除)
End Select
Case 2 ' 2列めなら
' ' 変更されたセルの 行位置 によって処理を分岐する
Select Case Target.Row
Case 1 ' 2列め の 1行め なら
' B1 の場合の処理
MsgBox "B1" ' 確認用(確認が済んだら当行削除)
Case 2 ' 2列め の 2行め なら
' B2 の場合の処理
MsgBox "B2" ' 確認用(確認が済んだら当行削除)
End Select
End Select
End Sub
(3)セルのアドレスを採り文字列で分岐したい場合
(個人的にはあまりお奨めしていませんが、知っておいた方が好いもの)
Private Sub Worksheet_Change(ByVal Target As Range)
'' ' 変更されたセルの 参照文字列(A1型) によって処理を分岐する
Select Case Target.Address(False, False)
Case "A1"
MsgBox "A1" ' 確認用(確認が済んだら当行削除)
Case "A2"
MsgBox "A2" ' 確認用(確認が済んだら当行削除)
Case "B1"
MsgBox "B1" ' 確認用(確認が済んだら当行削除)
Case "B2"
MsgBox "B2" ' 確認用(確認が済んだら当行削除)
End Select
End Sub
とりあえず、単セルの場合だけ、理解を深めてみましょう。
複数セルに値変更があった場合については、その後でいいと思います。
(1)にある
If Target.Count > 1 Then Exit Sub
If Target.Column <> 1 Then Exit Sub
のような記述はイベントプロシージャでは多用される基本中の基本ですから
よーく咀嚼して呑み込んじゃってください。
一応、いわずもがなですが、
上に挙げたようなイベントプロシージャを複数併記することはできませんので
使わないものはコメントブロックして下さい。
VBE(Visual Basic Editor)のツールバーに[編集]というのを追加してあれば
[コメントブロック]、[非コメントブロック]というボタンがありますので適宜。
また、イベントプロシージャで注意するべき点として
例えば今回のChangeイベントの処理中にセルの値を変更すれば
再度Changeイベントが呼び出される(再帰)ということを知っておいてください。
その場合、
Application.EnableEvents = False
' 処理
Application.EnableEvents = True
のような形で、再帰を回避します。
私自身VBAを覚え初めの頃は、イベントプロシージャとばかり格闘して
日に何百回もエラーを出しながら納得がいくまで色んなことを試していた覚えがあります。
・オブジェクトやプロパティの基本的な扱い方
・条件分岐
などの基本事項を覚えるのには最適の課題ですから、頑張って挑戦し続けてください。
以上です。
///
Re:#2 ちょっと違うかも。
それは、「A1 と 同じ値 に変更された セル があった場合」の処理になっています。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Range("A1") Then
MsgBox Target.Address
End If
End Sub
として、例えば、C3セルにA1と同じ値を設定すると違うのがわかると思います。
あしからず、、、
とても丁寧な回答ありがとうございますm(_ _ )m
凄く勉強になります。
色々試してわかったことがあるのですが、セル値の変更はwebクエリで更新された場合は判定されないのでしょうか。
No.4
- 回答日時:
どうも
> 色々試してわかったことがあるのですが、セル値の変更はwebクエリで更新された場合は判定されないのでしょうか。
答えは「はい(No)」です。
Changeイベントは、WEBクエリの更新を契機(トリガー)にすることはできません。
「Webクエリの更新に連動したイベント」ということになると、
かなり高度な複合技という感じでしょうか。
いくつか方法はあるようですが私にとっては不得手なジャンルですし
'回答というレベル'で書けるものは持ち合わせていませんので、ご容赦を。
もしそのテーマについて、別途質問されるのでしたら使用環境などの詳細を示した方が良さそうです。
(私宛ではないですが)
> 例えばChangeターゲットのセルはA1なのですが、A1は(=B1)の数式の場合、B1の数値が変ってもターゲットがA1の場合は更新の判定がされません。
Changeイベントは計算の結果として値変更されたものを返しませんから
その意味では正常な動作です。
方法としては
Worksheet_Calculateイベントを使って工夫する手もありますが
この例では参照先(B1)の変更をChangeイベントで追う方が
一般的でしょうね。
それでは、また
No.2
- 回答日時:
シート1のシート見出しを右クリックして「コードの表示」を選択します。
コードは次のようにすることでもしA1が変わればマクロAがA2が変わればマクロBが実行されますね。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Range("A1") Then
'マクロAの内容
End If
If Target = Range("A2") Then
'マクロBの内容
End If
End Sub
または 例えばマクロAの内容を
Sub マクロA()
マクロAの内容
End Sub
マクロBの内容を
Sub マクロA()
マクロAの内容
End Sub
と別に用意しておきそれらを呼び出すような形にします。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Range("A1") Then
Call マクロA
End If
If Target = Range("A2") Then
Call マクロB
End If
End Sub
この回答への補足
思っていた通りの事が出来ましたm(_ _ )mありがとうございます。
ただ、ひとつ疑問点が・・・
例えばChangeターゲットのセルはA1なのですが、A1は(=B1)の数式の場合、B1の数値が変ってもターゲットがA1の場合は更新の判定がされません。
これを判定する方法などありますでしょうか。
No.1
- 回答日時:
【VBA】エクセルシート上のある1つのセルの値が更新される度にVBAを実行する方法 - Yahoo!知恵袋
http://detail.chiebukuro.yahoo.co.jp/qa/question …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- エクセルのマクロについて教えてください。
- vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使
- エクセルのマクロについて教えてください マクロを実行して 作業フォルダの中にある PDFファイル名を
- vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使
- エクセルのマクロについて教えてください。
- エクセルのマクロについて教えてください。
- エクセルのセル値に対応してマクロを実行する方法を教えてください セルA1が「1」の時にマクロ名「マク
- エクセルのマクロについて教えてください。
- Excelのマクロについて教えてください。
- エクセルのマクロについて教えてください。
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
マクロ 実行ボタンを押さずに常に実行
Excel(エクセル)
-
EXCEL あるセルに数字が入力されれば既存マクロ実行させたい
Excel(エクセル)
-
セルに入力するたびにマクロを実行する
Visual Basic(VBA)
-
-
4
エクセルのマクロをセルの値に応じて自動起動したい
Visual Basic(VBA)
-
5
エクセル マクロの実行について
Excel(エクセル)
-
6
エクセルでセルに文字が入力されたらマクロを実行
Excel(エクセル)
-
7
Excel VBAでのWorksheet_Changeが動作しない原因
Excel(エクセル)
-
8
他のシートの特定のセルが変わると、自動実行されるマクロについて
Excel(エクセル)
-
9
エクセルvba (ByVal Target As Range)について
Excel(エクセル)
-
10
EXCELでセルの値が変化したときだけにマクロ実行
Excel(エクセル)
-
11
Enterキーでマクロを起動さす。
その他(ソフトウェア)
-
12
値を入力後、自動的にアクティブセルが移動するマクロ
Excel(エクセル)
-
13
【Excel VBA】セルの値が変更されたらマクロを実行
その他(Microsoft Office)
-
14
エクセルVBA シートモジュールにチェンジイベントを複数設定する方法を教えて下さい。 例えば、B列に
Visual Basic(VBA)
-
15
セルの結果でマクロ実行
Visual Basic(VBA)
-
16
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
17
エクセル イベントマクロ Changeイベントを複数作りたい
Access(アクセス)
-
18
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
19
Excel 条件によって入力禁止にする
Excel(エクセル)
-
20
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
エクセル 数字をすべて○などの...
-
Excelで、図形内の文字をセルに...
-
マクロを実行すると画像がズレ...
-
クリックすると文章が表示され...
-
Excel内での検索結果をシート...
-
[エクセル VBA]テキストファ...
-
フォントの色を指定して削除出...
-
Excelでセルをクリックす...
-
現在のセルの位置を返す関数は...
-
エクセルでの検索ボックスの作...
-
エクセルでページ数をあるセル...
-
セルの内容をテキストボックス...
-
太字に設定されているセルの個...
-
未記入がある場合はマクロを実...
-
セルがクリックされた回数をカ...
-
Excelで挿入した図をセルの中央...
-
セルの値が変ると自動でマクロ...
-
シート保護とグループ化機能を...
-
空白セルを空セルに置き換える...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
エクセル 数字をすべて○などの...
-
Excel内での検索結果をシート...
-
クリックすると文章が表示され...
-
Excelでセルをクリックす...
-
Excelで、図形内の文字をセルに...
-
マクロを実行すると画像がズレ...
-
エクセルでの検索ボックスの作...
-
Excel ハイパーリンクのURLを別...
-
太字に設定されているセルの個...
-
セルの値が変ると自動でマクロ...
-
セルの内容をテキストボックス...
-
現在のセルの位置を返す関数は...
-
フォントの色を指定して削除出...
-
EXCELのセルや文字色の反映
-
Excelで挿入した図をセルの中央...
-
VBA 見つからなかった時の処理
-
【EXCEL】先週の月曜日の日付を...
-
エクセル 未入力セルがあると...
-
excelで セルの移動時に...
おすすめ情報