• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:[VBA]型が一致しません)

[VBA]型が一致しません

このQ&Aのポイント
  • EXCELWORKSHEET上で特定の処理を行う際に、「型が一致しません」とエラーが発生します。
  • 特定条件下でDELETEキーを押すとエラーが発生し、原因と対応策が分かりません。
  • デバッグの方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

原因はTargetが複数セルだった場合を考慮していないからだと思います。 デバッグ方法は、エラーで背景が黄色くなった行で、「Target.Column」や「Target.Column Like 2」や「Target.Value」や「Len(Target.Value)」を選択して、SHIFT+F9を押して変数の値を確かめると、どの変数がエラーなのかわかります。 「Len(Target.Value)」で、「型が一致しません」というので、イミディエイトウインドウで ? vartype(Target.Value) とすると 8204 と表示します。 gooやgoogleで「vartype 8204」で調べれば、「バリアント型の配列」だとわかります。 対応策は複数同時に更新されたらどうするかによって違います。 現状のコードをできるだけ変更しない方法は、以下でどうでしょうか? Private Sub WORKSHEET_CHANGE(ByVal Target As Range) If Target.Count >= 2 Then MsgBox "複数同時変更はだめ" Exit Sub End If If Target.Column Like 2 And Len(Target.Value) > 0 Then 以下同じ End Sub Targetのセルを1つずつ処理に渡す方法。 targetの部分をたとえばtarget1に変更して、「For Each target1 In target」で1つずつ処理に渡します。 Private Sub WORKSHEET_CHANGE(ByVal target As Range) Dim target1 As Range For Each target1 In target If target1.Column Like 2 And Len(target1.Value) > 0 Then Range("c" & target1.Row).Value = Now If target1.Column Like 2 And Len(target1.Value) > 0 Then 'B列の場合だけ確認 Dim rng As Range Set rng = ActiveSheet.Range("B:B").Find(What:=target1, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True, MatchByte:=True) If Not rng Is Nothing Then '発見した。 If rng.Address <> target1.Address Then '入力中セル以外で発見 以下同じ ただし、End Subの手前にFor Each に対応するNextを入れる(下) Next End Sub

Steve_hemi
質問者

お礼

fumufumu_2006様。 的確かつすばやい回答ありがとうございました。 おかげさまで、問題なくエラーが解消され、意図どおりの動作に修正することができました。深謝。

関連するQ&A

専門家に質問してみよう