No.4ベストアンサー
- 回答日時:
こんばんは。
#2の回答者です。
>セルB1に引き金のキーワードが入ります。
なるほど、意味が分かりました。
キーワードが、例えば、「keyword」なら、以下のようにすればよいです。
And Target.Value = "keyword" Then (流れは、下のコードを参照してくださいょ
一応、Binary 比較ですから、大文字・小文字は別になります。
複数の場合などは、またおっしゃってください。少し、ややこしくなります。
Text 比較の場合は、大文字・小文字は同じになりますが、
And StrComp(Target.Value, "keyword", vbTextCompare) = 0 Then
としてあげます。他にも、Like演算子などもありますが、オプション・コンペア・ステートメントが必要になってしまいます。
> Application.EnableEvents = False
これを入れないと、新たにイベントが発生してしまいます。
しかし、
>Application.EnableEvents = True
終わった後に、イベントの発生を戻さないと、次回、イベント起動しません。
もちろん、それを無視して、コードが再帰しても、入り口で、弾かれるようなコードをおいておけば、二度目は弾かれるのですが、制御しないままよりも、このような場合、基本的に、EnableEvents でイベントを止めます。これは、ステップ・モードでみれば分かります。
'//
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub 'セル値が複数の場合は除外
If Target.Address = "$B$1" And Target.Value = "keyword" Then '←KeyWord
Application.EnableEvents = False 'イベントの中断をしないと、新たにイベントが発生
Range("B3:B8").ClearContents
Application.EnableEvents = True
End If
End Sub
'//
この回答への補足
ベストアンサーですが、
お二方に差し上げたいのですが、一つしか選べません。
恐縮ですが、
そっくり使わせていただいたコードを提供いただいたので、
こちらにさせていただきました。
どうも有り難うございました。
早速2度目の回答を頂き、有り難うございました。
よく分かりました。
結局は、B1セルに入ったときだけ引き金を引くというイベントは存在しない、
ということですね、了解しました。
また、3番のお礼に書きましたが、やることは複雑ではなく、
B1に作業するキーワードが入れば単純に何箇所かのクリアをするだけです。
ということから、
2番目に頂いた回答をそっくり使わせていただきます。
追加でお教えいただいた、
引き金の条件も分かっておりました。
また、イベントのgo,stopも了解です。
お手間をお掛けしました。
お世話になりました。
No.3
- 回答日時:
No1です
>先ず、やりたいことは
セルB1に引き金のキーワードが入ります。
それを引き金にセルB3~B8をクリアする、です。
「B1に何か入力されればB3~B8を削除する」だけなら以下で良い気がしますが。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$1" Then Range("B3:B8").ClearContents
End Sub
「B1で入力されたものと一致する値のみをB3~B8から削除する」場合なら以下のような感じです。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
If Target.Address <> "$B$1" Then Exit Sub
For i = 3 To 8
With Range("B" & i)
If .Value = Range("B1") Then .ClearContents
End With
Next i
End Sub
早速2度目の回答を頂き、有り難うございました。
よく分かりましたので、今回の回答は読みやすくなりました。
結局は、B1セルに入ったときだけ引き金を引くというイベントは存在しない、
ということですね、了解しました。
また、やることは複雑ではなく、
B1に作業するキーワードが入れば単純に何箇所かのクリアをするだけです。
ということから、
2番目に頂いた回答をそっくり使わせていただきます。
追加でお教えいただいた、
指定内容と同じモノをクリアするというロジックも
今後使わせていただきます。
お手間をお掛けしました。
お世話になりました。
No.2
- 回答日時:
こんにちは。
イベントが、ループしていますから、再帰して、パラメーターのTarget に、Range("B3:B8")のValue値が格納されて、配列になっているので、それと、B1の値と比較するので、「13:型が一致しない」というエラーが出ます。(意味が分かるでしょうか?)
ただ、そのコードの目的が書かれていないので、コードが意味が良く分かりませんが、こちらの類推ですが、たぶん、B1に何かを入れたら、Range("B3:B8").ClearContents したいように思えます。
>If Target = Range("B1") Then
まさか、Value値が一致しているということなのでしょうか、イベントで同じセルの比較などはありませんから、セルの場所ということにします。
'//
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub 'セル値が複数の場合は除外
If Target.Address = "$B$1" Then
Application.EnableEvents = False 'イベントの中断
Range("B3:B8").ClearContents
Application.EnableEvents = True
End If
End Sub
'//
この回答への補足
お教えいただいたコードがそっくり使えますので、
コピーさせていただきます。
(私のやりたいことにピッタリのイベントが在れば、そちらに変更しますが)
有り難うございました。
なお、再度回答いただけるかも知れませんので、もう少し開けておきます。
早速有り難うございました。
お教えいただいた内容は違いますが、
1番の方と同じことだと理解しました。
何をやりたいかは、ご指摘のとおりです。
頂いた回答で何となく分かりましたが、
考え方が違っていたみたいです。
B1に変更があったときにだけイベントが発生する、と思っていました。
なので、書き込みは1回なので、お教えいただいた、「ループする」とは思っていませんでした。
このチェンジイベントは、シートに対して引き金が引かれるのですね。
なお、1番の方のお礼にも書きましたが、
私の考えのようなイベント引き金は存在しないのでしょうか。
追加で恐縮ですが、お教えいただければ嬉しいです。
宜しくお願いいたします。
No.1
- 回答日時:
Range("B3:B8").Select
Selection.ClearContents
によりシートに変更が加わった後もセル範囲として
If Target = Range("B1") Then
でB1と比較しているため、型不一致となっているようです。
If Target = Range("B1") Then
の手前に
If Selection.Count <> 1 Then Exit Sub
を追加でどうでしょ。
早速有り難うございました。
2番の方の回答にも書かれていますが、
何をやりたいかと私の考えが違っていたみたいです。
頂いた回答で何となく分かりました。
先ず、やりたいことは
セルB1に引き金のキーワードが入ります。
それを引き金にセルB3~B8をクリアする、です。
そして考え違いは、
B1に書き込まれたら(変更があったら)イベントが発生すると思っていました。
なので、書き込みは1回なので、お教えいただいた、「ループする」とは思っていませんでした。
このチェンジイベントは、シートに対して引き金が引かれるのですね。
よく分かりました。
なお、私の考えのようなイベント引き金は存在しないのでしょうか。
追加で恐縮ですが、お教えいただければ嬉しいです。
宜しくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Visual Basic(VBA) Excelマクロでセルに値が入力されたら実行する 5 2023/08/06 11:03
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) Worksheet_Change 4 2023/03/12 21:54
- Visual Basic(VBA) エクセル VBAで複数セル選択時エラーになる問題 3 2022/10/04 02:40
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル初心者です 関数の入れ...
-
【関数】先頭だけにある、半角...
-
エクセル 白黒印刷で白線を印刷...
-
Excelのチェックボックスの使い...
-
【関数】適切な文字数の数字を...
-
Excelのpivotについて質問です
-
Excel ピボットテーブルで日付...
-
LOOKUP関数を使えばいいのでし...
-
エクセル関数を教えてください
-
エクセルのセルに同じ大きさの...
-
UNIQUE関数が使えないバージョ...
-
excelの不要な行の削除ができな...
-
エクセルで「-0.0」と表示さ...
-
時間によってファイル名が変わ...
-
WPS OFFICEでの縦書きについて
-
エクセルの関数について教えて...
-
Aというブックの1というシート...
-
【マクロ】シート名を取得する...
-
VBA Private Sub Worksheet_Cha...
-
VBA、Excelのworkbook.open に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
[関数得意な方]教えて下さい・...
-
Excelにてある膨大なデータを管...
-
[関数について]わかる方教えて...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセル関数に詳しい方教えて...
-
INDIRECTを使わず excelで複数...
-
[オートフィルタ]で抽出された...
-
エクセルの神よ、ご回答を! エ...
-
エクセル関数に詳しい方、教え...
-
各ページの1番上の表示について
-
Excelで写真のような表を作った...
-
エクセルで不等号記号(≠)が上に...
-
数学 Tan(θ)-1/Cos(θ)について...
-
Excel 2019 は、SPILL機能があ...
-
Excelで全角を半角にしたいので...
-
条件付き書式を教えてください
-
Excel フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報