Vlookupを使用して、「データベース」(DB_SHEET)で税金を見つけようとしています。私の名前が私のDBに存在しない場合、VlookUpでエラー「1004」が発生しました。
'On Error GoTo Err1'がエラーをキャッチしないのはなぜですか?
私のコード:
Dim tax1 as Double, tax2 as Double, name as String
On Error GoTo Err1
While Cells(rowIndex, 1) <> ""
name = Cells(rowIndex, 4)
fin = Cells(rowIndex, 5) * Cells(rowIndex, 6)
tax1 = WorksheetFunction.VLookup(name, Sheets(DB_SHEET).Range("D:G"), 3, False)
tax2 = WorksheetFunction.VLookup(name, Sheets(DB_SHEET).Range("K:P"), 2, False)
Cells(rowIndex, 8) = (fin * tax1) - (fin * tax2)
Err1:
rowIndex = rowIndex + 1
Wend
On Error Goto 0
動作するコードはすでに知っていますが、「WorksheetFunction」を実行できず、「OnError」を使用してエラーをキャッチできない理由を理解したいと思います。
動作する他のバージョン:
Dim tax1 as Variant, tax2 as Variant, name as String
While Cells(rowIndex, 1) <> ""
name = Cells(rowIndex, 4)
fin = Cells(rowIndex, 5) * Cells(rowIndex, 6)
tax1 = WorksheetFunction.VLookup(name, Sheets(DB_SHEET).Range("D:G"), 3, False)
tax2 = WorksheetFunction.VLookup(name, Sheets(DB_SHEET).Range("K:P"), 2, False)
If Not IsError(tax1) And not IsError(tax2) Then
Cells(rowIndex, 8) = (fin * tax1) - (fin * tax2)
End if
rowIndex = rowIndex + 1
Wend
編集(後:K_B回答)
1)WorksheetFunction.Vlookup(...)の内部でApplication.Vlookup(...)を使用すると、「エラー13」が発生します。