こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VLookupで一致しなかった時のVBAでの処理

On Error ~を使わないで、
VLookup()で一致しなかった時の処理をさせたいのですが
どのように記述すればよいでしょうか。

例えば、以下のようなコードの場合、
一致したデータがない時にyに-1を代入するには
以下のコードをどのように記述すればよいのでしょうか。

---------------------
Dim x As Integer
Dim y As String
x = 7
y = Application.WorksheetFunction.VLookup(x, Worksheets("Sheet1").Range("A1:B100"), 2, False)
---------------------

以下はいずれもエラーになりますが、以下のような感じで処理がしたいです。
---------------------
If IsError(Application.WorksheetFunction.VLookup(x, Worksheets("Sheet1").Range("A1:B100"), 2, False)) Then
 y = -1
Else
 y = Application.WorksheetFunction.VLookup(x, Worksheets("Sheet1").Range("A1:B100"), 2, False)
End If
---------------------
If Application.WorksheetFunction.IsNA(Application.WorksheetFunction.VLookup(x, Worksheets("Sheet1").Range("A1:B100"), 2, False)) Then
 y = -1
Else
 y = Application.WorksheetFunction.VLookup(x, Worksheets("Sheet1").Range("A1:B100"), 2, False)
End If
---------------------
y = Application.WorksheetFunction.IfError(Application.WorksheetFunction.VLookup(x, Worksheets("Sheet1").Range("A1:B100"), 2, False), -1)
---------------------

なお、以下のように本来エラーではない処理で
On Error Resume Nextを使うのは、
本当のエラーの処理と混同するため不可
---------------------
On Error Resume Next
y = Application.WorksheetFunction.VLookup(x, Worksheets("Sheet1").Range("A1:B100"), 2, False)
If Err <> 0 Then y = -1
On Error GoTo 0
---------------------

投稿日時 - 2017-01-20 11:07:03

QNo.9283550

困ってます

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

こんにちは
VLookupに拘らずに、
Sub test()
  Dim x As Integer
  Dim y As String
  Dim z As Variant
  x = 7
  z = Application.Match(x, Worksheets("Sheet1").Range("A1:A100"), 0)
  If IsError(z) Then
    y = -1
  Else
    y = Worksheets("Sheet1").Range("B" & z)
  End If
End Sub
こうしてみては?

投稿日時 - 2017-01-20 11:20:21

お礼

教えていただきました方法でうまくいきました。
ありがとうございました。

投稿日時 - 2017-01-25 16:36:28

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

意表をついてCOUNTIFとか

Sub sample()
    x = 1

    If WorksheetFunction.CountIf(Range("A1:A100"), x) = 1 Then
        y = WorksheetFunction.VLookup(x, Range("A1:B100"), 2, False)
    Else
        y = -1
    End If

    Debug.Print x, y

End Sub

投稿日時 - 2017-01-20 12:24:25

お礼

こちらの方法でもうまくいきました。
ありがとうございました。

投稿日時 - 2017-01-25 16:36:52

あなたにオススメの質問