ExcelVBA エラー処理で2回目の同一エラーは
こんにちは。
EcxelVBA初心者です。
セルD8~D10の値をCP44~CP100の値と比較し、一致したら8~10行目のそれぞれのセルに記入する際、
CP44~CP100に一致しない場合(エラー91)、エラー処理でメッセージを表示し、次の比較に進みたくてGOTOを使用していますが、
一度目のエラーはできるのに、二度目のエラーでは「実行時エラー91」が表示されてしまいます。
なぜ、一度目と同じようにエラー処理でメッセージ表示、次の比較に勧めないのでしょうか?
よろしくお願いします。
Sub test()
Dim i As Integer
Dim lng As Long
i = 8
lng = 10
On Error GoTo D_Error
i = 8
Cells(i, "D").Value = StrConv(Cells(i, "D").Value, vbUpperCase) '半角小文字は半角大文字に修正
strType = Cells(i, "D").Value
For i = 8 To lng
Cells(i, "D").Value = Trim(StrConv(Cells(i, "D").Value, vbUpperCase)) '半角小文字は半角大文字に修正し、余分なスペースも取る
strType = Cells(i, "D").Value
If Len(Trim(Cells(i, "D").Value)) = 0 Then ' D列のデータがなければ次の行へ
GoTo BBB
End If
intStr = 0
Cells(i, "D").Select
strType = Cells(i, "D").Value
intStr = InStr(strType, "-") 'ハイフンの位置で調べる
If intStr = 0 Then 'ハイフンがなければ、あいまい検索で文字列を探す
Set rngTarget = Range("CP44:CP100").Find(What:=strType, lookat:=xlPart)
intTarget = rngTarget.Row
Cells(i, "AE").Value = Cells(intTarget, "CR").Value
Cells(i, "AF").Value = Cells(intTarget, "CS").Value
Cells(i, "AG").Value = Cells(intTarget, "CT").Value
Else 'ハイフンがあれば、「(」カッコの有無を調べてから、「-」前の文字を完全一致で探す
If Mid(strType, intStr - 1, 2) = "(-" Then
strType = Left(strType, intStr - 1 - 1)
Else
strType = Left(strType, intStr - 1)
End If
Set rngTarget = Range("CP44:CP100").Find(What:=strType, lookat:=xlWhole)
intTarget = rngTarget.Row
Cells(i, "AE").Value = Cells(intTarget, "CR").Value
Cells(i, "AF").Value = Cells(intTarget, "CS").Value
Cells(i, "AG").Value = Cells(intTarget, "CT").Value
End If
BBB:
Next i
D_Error:
If Err.Number = 91 Then
If i > lng Then
GoTo AAA
End If
MsgBox "CP列に該当する型式がありません。" & Chr(13) _
& Chr(13) _
& " 型式があるものには「-」を使用してください。" & Chr(13) _
& " それ以外はCP44~CP100にデータを入力してください。"
ActiveSheet.Cells(i, "D").Interior.ColorIndex = 3
GoTo BBB
Else
GoTo AAA
End If
AAA: 'D8から下にデータがない場合
Set rngTarget = Range("CP44:CP100").Find(What:=strType, lookat:=xlPart) '完全一致の解除
Range("D8").Select
End Sub
お礼
回答ありがとうございます! 説明してもらい理解することができました。