
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も見ています
-
ExcelのVBAでエラー13が出てしまいます。(泣き)
Excel(エクセル)
-
Changeイベントでの複数セルのクリアの処理について
Visual Basic(VBA)
-
エクセル:Worksheet_Changeのエラー回避
Excel(エクセル)
-
-
4
ExcelのVBA。public変数の値が消える
Visual Basic(VBA)
-
5
Excel VBAでのWorksheet_Changeが動作しない原因
Excel(エクセル)
-
6
ブック名、シート名を他のモジュールからも参照可能にする方法
Access(アクセス)
-
7
VBA:結合されたセルに対する「Target」について
Access(アクセス)
-
8
VBA 数式を残して値をクリアについて
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの関数について
-
エクセル GROUPBY関数について...
-
Excelで4択問題を作成したい
-
エクセルの複雑なシフト表から...
-
エクセル
-
Amazonでマイクロソフトオフィ...
-
エクセルシートの見出しの文字...
-
グループごとの個数をカウント...
-
【マクロ】変数に入れるコード...
-
エクセルのリストについて
-
【マクロ】別ファイルへマクロ...
-
グループごとの人数のカウント
-
エクセルについて
-
グループごとの人数のカウント
-
【マクロ】左のブックと右のブ...
-
【マクロ】元データと同じお客...
-
【マクロ】数式を入力したい。...
-
【マクロ】【相談】Excelブック...
-
【マクロ】実行時エラー '424':...
-
他のシートの検索
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
9月17日でサービス終了らし...
-
エクセル
-
【マクロ】WEBシステムから保存...
-
エクセルの循環参照、?
-
エクセル ドロップダウンリスト...
-
エクセルのdatedif関数を使って...
-
特定のセルだけ結果がおかしい...
-
【マクロ】A列にある、日付(本...
-
【マクロ】EXCELで読込したCSV...
-
【マクロ】アクティブセルの時...
-
【エクセル】期限アラートについて
-
iPhoneのExcelアプリで、別のシ...
-
【関数】同じ関数なのに、エラ...
-
Excelの新しい空白のブックを開...
-
【マクロ】3行に上から下に並...
-
【マクロ】宣言は、何のために...
-
VBA チェックボックスをオーバ...
-
Excelについての質問です 並べ...
-
【マクロ】アクティブセルの2...
-
【関数】不規則な文章から●●-●●...
おすすめ情報