列Aの各値から日付を知りたいのですが、これはVBAでVLookup
関数を使用していますが、値が見つからない場合(= N/A)コードが停止します。結果がN/Aの場合、Vlookupは機能しません
このエラーはどのように処理すればよいですか?
Here'sコード:
Sub lapse_Function()
Dim wsAll As Worksheet
Dim wsDb As Worksheet
Dim lapse As Variant
Dim startDate As Date
Dim Lookup_Range As Range
Dim ID_number As Object
Set wsDb = Worksheets("Database")
Set wsAll = Worksheets("All data")
'Run function
rowNo = 2
Do Until IsEmpty(wsDb.Cells(rowNo, 2))
'Set values
studyDate = DateValue("March 3, 2017")
Set Lookup_Range = wsAll.Range(wsAll.Cells(1, 1), wsAll.Cells(500, 3))
Set ID_number = wsDb.Cells(rowNo, 2)
lapse = Application.WorksheetFunction.VLookup(ID_number, Lookup_Range, 3, False) 'Here is where the code stops. I have next the IF in case of error but it won't work
'Assing value
If IsError(lapse) Then
Cells(rowNo, 23).Value = "Less than 4 months" 'NOT WORKING
Else
If ((studyDate - lapse)/7) < 52 Then
Cells(rowNo, 23).Value = Round(((studyDate - lapse)/7), 0) & " weeks"
Else
Cells(rowNo, 23).Value = Round(((studyDate - lapse)/360), 1) & " months"
End If
End If
rowNo = rowNo + 1
Loop
End Sub
「コード停止」とはどういう意味ですか?エラーメッセージが表示されたら、そのメッセージは何ですか? 'IsError()'は、 'VLOOKKUP'が返すエラー*値をテストできますが、VBAランタイムエラーをキャッチしません。それはそのために設計されていません。 –
用途:Application.VLookup。代わりに:Application.WorksheetFunction.VLookup – user3598756
エラーが発生したときに実行を続行するには、 'On Error Resume Next'を使用する必要があります。これを元に戻すには、 'On Error GoTo 0'エラーをテストするには' If Err.Number <> 0 Then: 'Reset Error:Err.Clear'を実行します。また、 ''日付を遅くする:lapse = CDate(... VLookUp ...) ' – PatricK