プロが教えるわが家の防犯対策術!

都道府県コードを検索値としたVLOOKUPでエラーになります。

Sheet1のA列に検索値の都道府県コード、B列に検索結果を表示させるため、Sheet2のA列に都道府県コード、B列に都道府県名の検索範囲があります。
下記のような記述をしていますがエラーになってしまいます。

Sub vlookup()
Dim workSh, prefSh As Worksheet
Set workSh = ThisWorkbook.Worksheets("Sheet1")
Set prefSh = ThisWorkbook.Worksheets("Sheet2")

'検索範囲を指定する
Dim prefRng As Range
Set prefRng = Range(prefSh.Cells(2, 1), prefSh.Cells(48, 2))

Dim workEndR, workTmpR As Long, tmpStr As String
workEndR = workSh.Cells(Rows.Count, 1).End(xlUp).Row

'VLookupでSheet1に入力された都道府県コードから、Sheet2の指定した範囲から都道府県名を求める
'発見できなかった場合エラーとなりマクロが停止するので、On Errorステートメントで制御する
For workTmpR = 2 To workEndR
tmpStr = workSh.Cells(workTmpR, 1).Value
On Error Resume Next
workSh.Cells(workTmpR, 2).Value = Application.WorksheetFunction.vlookup(tmpStr, prefRng, 2, False)
If Err <> 0 Then
workSh.Cells(workTmpR, 2).Value = "ERROR"
Err.Clear
End If
Next
End Sub

問題の解決にお知恵を貸してください。
よろしくお願いいたします。

A 回答 (1件)

こんにちは



>下記のような記述をしていますがエラーになってしまいます。
エラーの状況が明確にわかりませんが、勝手な推測で、セルの表示が「ERROR」となるということと仮定しました。

もしそうであるなら、次の手順を試してみてください。
1)Application.WorksheetFunction.vlookup(
    ↓ ↓
  Application.VLookup(
 に変更してみる。

 この結果、セルに検索結果が表示されるか、あるいは、表示内容(の一部)が「#N/A」に変わるのではないかと推測します。

2)表示が「#N/A」になる場合の対処として
   tmpStr As String → tmpStr
  に変更してみる。

うまくいけば、上記の(両方又は一方の)対処で表示されるのではないかと想像します。
 


※ 以下は、別法としてこんなのもあるよというご参考までに。
 (結果的には、ほぼ同じ処理になります)

Sub Sample()
Const workSh = "Sheet1"
Const prefSh = "Sheet2"

With ThisWorkbook.Worksheets(workSh)
With Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(xlUp)).Offset(0, 1)
 .Formula = "=Vlookup(A2," & prefSh & "!A$2:B$48,2,0)"
 .Value = .Value
End With
End With

End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。
はじめて「教えてgoo」に質問してみましたが本当に解決してくれる方がいることに驚いています。
どこかに助けてくれる方がいるとは、世の中捨てたものでは無いと実感しました。今後ともよろしくお願いいたします。

お礼日時:2019/02/28 11:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!