![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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ランキング
-
IFとIFS関数
-
Excelを無料で使うには? パソ...
-
セルの数を求めたい
-
Excelの表示についての質問
-
再質問です。マクロの修正箇所...
-
データチェックを行うエクセル...
-
エクセルで「ページレイアウト...
-
エクセルの数式バーのフォント...
-
エクセルの関数について教えて...
-
エクセルでセルに標準で入力さ...
-
Microsoft1Officeの互換ソフト...
-
シフト表をエクセルで作るとき...
-
ユーザー定義関数をアドイン登...
-
Excel VBAで全ての矢印を赤色に...
-
VBA Private Sub Worksheet_Cha...
-
2列に入っているデータを1列...
-
Excelに詳しい方! B列が「日...
-
excel2013 MonthDays 関数が使...
-
エクセルのクイックアクセスツ...
-
Excelの数式について教えてくだ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
半角カタカナをヘボン式ローマ...
-
(マクロ)vlookupの元データを同...
-
エクセルで上位バイトのセルと...
-
exselの質問です
-
Excel 大小比較演算子による「...
-
Excel VBについての質問です。
-
エクセルの問題です。絶対値の...
-
非表示列の再表示に失敗
-
職場の人から聞かれており、こ...
-
Excel関数-文字列で自動作成さ...
-
Excelデータをコピペして、ペー...
-
ユーザー定義関数をアドイン登...
-
【マクロ】for next構文について
-
エクセルの日付を編集する
-
【マクロ】VLOOKUPにて参照元に...
-
exselで最小数で並び替える関数
-
libre 表計算ソフトの計算がう...
-
エクセルで表
-
エクセルの表で1年間の曜日を...
-
西暦和暦
おすすめ情報