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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/26 13:19
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
- Visual Basic(VBA) エクセルのマクロについて教えてください マクロを実行して 作業フォルダの中にある PDFファイル名を 3 2023/07/01 15:16
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 1 2023/02/27 22:21
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/25 16:07
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
- Excel(エクセル) エクセルのセル値に対応してマクロを実行する方法を教えてください セルA1が「1」の時にマクロ名「マク 2 2022/06/19 18:45
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/04 10:48
- Excel(エクセル) Excelのマクロについて教えてください。 4 2022/05/31 14:07
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2022/08/04 13:56
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
マクロ 実行ボタンを押さずに常に実行
Excel(エクセル)
-
EXCEL あるセルに数字が入力されれば既存マクロ実行させたい
Excel(エクセル)
-
エクセルのマクロをセルの値に応じて自動起動したい
Visual Basic(VBA)
-
-
4
エクセル マクロの実行について
Excel(エクセル)
-
5
セルに入力するたびにマクロを実行する
Visual Basic(VBA)
-
6
【Excel VBA】セルの値が変更されたらマクロを実行
その他(Microsoft Office)
-
7
セルの結果でマクロ実行
Visual Basic(VBA)
-
8
他のシートの特定のセルが変わると、自動実行されるマクロについて
Excel(エクセル)
-
9
エクセルvba (ByVal Target As Range)について
Excel(エクセル)
-
10
EXCELでセルの値が変化したときだけにマクロ実行
Excel(エクセル)
-
11
エクセルでセルに文字が入力されたらマクロを実行
Excel(エクセル)
-
12
Worksheet_Changeの内容を標準モジュールから実行するには?
その他(プログラミング・Web制作)
-
13
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
14
エクセル イベントマクロ Changeイベントを複数作りたい
Access(アクセス)
-
15
特定セルの内容を更新したら、その更新日を自動的に表示する方法について
Excel(エクセル)
-
16
【vba】指定範囲の中に任意の文字があるときの条件分岐
Excel(エクセル)
-
17
excelで セルの移動時にマクロ実行を設定したい。
Excel(エクセル)
-
18
IF関数を使ってマクロを実行させるには?
Excel(エクセル)
-
19
Excel VBA あるセルでENTERを押すと特定のセルへ移動したい
Excel(エクセル)
-
20
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
Excel内での検索結果をシート...
-
エクセル 数字をすべて○などの...
-
マクロを実行すると画像がズレ...
-
空白セルを空セルに置き換える...
-
太字に設定されているセルの個...
-
Excelで、図形内の文字をセルに...
-
エクセルマクロ 赤色の文字を検...
-
エクセルでページ数をあるセル...
-
Excel2007 色のカウント (VBA)
-
クリックすると文章が表示され...
-
エクセルでの検索ボックスの作...
-
アポストロフィーの一括挿入 ...
-
セルの内容をテキストボックス...
-
VBA 見つからなかった時の処理
-
フォントの色を指定して削除出...
-
エクセルでPDFリンクを大量...
-
コピペして元のセルに戻るVBAに...
-
Excel ハイパーリンクのURLを別...
-
VBAで特定の文字以降の文字列の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
エクセル 数字をすべて○などの...
-
Excel内での検索結果をシート...
-
Excelで、図形内の文字をセルに...
-
マクロを実行すると画像がズレ...
-
クリックすると文章が表示され...
-
Excelでセルをクリックす...
-
Excelで挿入した図をセルの中央...
-
太字に設定されているセルの個...
-
現在のセルの位置を返す関数は...
-
セルがクリックされた回数をカ...
-
エクセルでの検索ボックスの作...
-
Excel ハイパーリンクのURLを別...
-
エクセルでPDFリンクを大量...
-
Excel2007 色のカウント (VBA)
-
フォントの色を指定して削除出...
-
【EXCEL】先週の月曜日の日付を...
-
VBA 見つからなかった時の処理
-
エクセルでページ数をあるセル...
-
空白セルを空セルに置き換える...
おすすめ情報