以下のようなマクロを組んでいるのですが
指定したセルの内容をDeleteした場合に
型が一致しませんというエラーが発生します
エラーが出るのはDeleteした場合のみで
他の操作ではエラーになりません
どのように変更したらよいでしょうか?
Private Sub worksheet_change(ByVal Target As Excel.Range)
If Application.Intersect(Target, Range("C40:C45")) Is Nothing Then Exit Sub
If Target = "" Then Worksheets("リスト").AutoFilterMode = False: Exit Sub
Worksheets("リスト").Range("A:I").AutoFilter field:=1, Criteria1:=Target.Value
End Sub
んーと。
そのマクロは,シート1のB1「だけ」に入力規則しているご質問の回答マクロから,ほとんど何も対応できていませんね。
回答したように「複数個のセル」が対象範囲になっている状況では,Targetに「複数のセル」が入ってくる場合があるため,エラーが起こる可能性が高くなります。
またエラーを回避できても,そのあとシート2にオートフィルタを掛けるに際して,そもそもC40からC45までの「どのセルの値」でオートフィルタしたらいいのか,優先順位や一体どうしたいのかが不明瞭なままです。
作成例:
private sub worksheet_change(byval Target as excel.range)
if application.intersect(target, range("C40:C45")) is nothing then exit sub
worksheets("リスト").autofiltermode = false
if target.count > 1 then exit sub
if target = "" then exit sub
worksheets("リスト").range("A:I").autofilter field:=1, criteria1:=target.value
end sub
#補足
ご相談投稿時には,マクロの「具体的にどの行でエラーが起きたのか」(エラーのダイアログが出たときにデバッグのボタンを押すと,どの行が黄色く表示されるのか)についても,キチンと情報提供するように心がけてみてください。
質問は適切に書いた方がいいと思います。
「C40 から C45 に掛かる複数のセルで変化が起きた場合」 って感じですか?
複数セルだった場合、Worksheet_Change イベントの引数 Target は単一セルではなく複数セルを持つ Range オブジェクトなので、
If Target.Value = "" Then
のように Target を単一セルのように扱ってしまっては NG です。
Dim r As Range
For Each r in Target
If r.Value = ...
Next
のように Target から単一セルを取り出して処理してください。
お礼
最後まで、丁寧にお付き合いくださり有難うございました。 当方の質問の仕方が至らないばかりに かなりのお手間を取らせてしまい、反省しております。 ここ数回の質問で頂いたコードを見比べ 勉強させて頂きます。 本当にありがとうございました。