の代わりにWorksheetFunction.Vlookup
、 を使用できますApplication.Vlookup
。これと等しい値を設定すると、Variant
一致するものが見つからない場合にエラー 2042 が返されます。次に、バリアントをテストできますcellNum
。この場合は、次のようにしIsError
ます。
Sub test()
Dim ws As Worksheet: Set ws = Sheets("2012")
Dim rngLook As Range: Set rngLook = ws.Range("A:M")
Dim currName As String
Dim cellNum As Variant
'within a loop
currName = "Example"
cellNum = Application.VLookup(currName, rngLook, 13, False)
If IsError(cellNum) Then
MsgBox "no match"
Else
MsgBox cellNum
End If
End Sub
および関数のApplication
バージョンを使用すると、エラーを発生させずにエラーをテストできます。バージョンを使用する場合、コードをエラー ハンドラーに再ルーティングする、次のステートメントに戻って評価するなどの複雑なエラー処理が必要になります。関数を使用すると、その混乱を回避できます。VLOOKUP
MATCH
WorksheetFunction
Application
上記は、IIF
関数を使用してさらに単純化できます。この方法は、常に適切であるとは限りません (たとえば、 に基づいてさらに多くの手順または別の手順を実行する必要If/Then
がある場合)。ただし、MsgBox に表示するプロンプトを単純に決定しようとしている場合は、次のように機能するはずです。
cellNum = Application.VLookup(currName, rngLook, 13, False)
MsgBox IIF(IsError(cellNum),"no match", cellNum)
ステートメントの代わりに これらのメソッドを検討してください。どちらも読みやすく、保守も簡単です。一連のandステートメントOn Error ...
に従うことほど混乱を招くものはほとんどありません。GoTo
Resume