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

Sheet1のA列にコードB列にメアド、Sheet2のB列にコード一覧とD列にメアド一覧があり、Sheet1のB2セルに=VLOOKUP(A2,Sheet2!B:D,3,FALSE)、B3セルに=VLOOKUP(A3,Sheet2!B:D,3,FALSE)と下にVLOOKUP関数が並び、Sheet2のメアド一覧を参照しています。VBA化で下記コードでエラー「WorksheetFunctionクラスのVlookupプロパティを取得できません。」となり、デバック
「 Sht1.Cells(i, 2) = Application.WorksheetFunction. _
VLookup(Target, MyArea, 3, False)」で止まっています。初心者のため理解できないので解決策を教えていただけませんでしょうか。お願いします。
Sub Vlookup関数で値取得()
Dim i As Long
Dim Target As Variant
Dim Sht1 As Worksheet
Dim Sht2 As Worksheet
Dim MyArea As Range
'シートを変数格納
Set Sht1 = Sheets("Sheet1")
Set Sht2 = Sheets("Sheet2")
'列を参照範囲に格納
Set MyArea = Sht2.Range("B:D")
'2~600行目をループ
For i = 2 To 600
'「名前」を取得
Target = Sht1.Cells(i, 1).Value
Sht1.Cells(i, 2) = Application.WorksheetFunction. _
VLookup(Target, MyArea, 3, False)
Next i
End Sub

「Sheet1のA列にコードB列にメアド、」の質問画像

A 回答 (3件)

Sheet1のA列で2行~600行まで繰り返していますが、


途中で空白になっている行がありませんか?
空白行に達したら、打ち切るようにします。

Target = Sht1.Cells(i, 1).Value
の次に、以下の行を追加してください。
If Target = "" Then Exit For

追伸:Sheet1のコードがSheet2にない場合、このエラーが発生します。
必ず、Sheet1のコードがSheet2にあることを確認してから行ってください。
    • good
    • 1
この回答へのお礼

ありがとうございます。止まらずに動きました。
もしコードがない場合、ポップアップで無いコードを表示するにはどう記述したらよいでしょう。お時間あるときにご教示いただけると助かります。

お礼日時:2022/10/19 13:15

あまり進めてはいけない方法かもしれませんが


最後までやりきるなら
Target = Sht1.Cells(i, 1).Value
On Error Resume Next ’一行加える
Sht1.Cells(i, 2) = Application.WorksheetFunction. _
VLookup(Target, MyArea, 3, False)
    • good
    • 1

こんにちは



>理解できないので解決策を教えていただけませんでしょうか。
原因と、解決法はNo1様の回答にある通りと思います。

シート関数を使うだけなら、マクロでいろいろやるよりもエクセルに計算させてしまう方が簡単な記述で済みます。
以下は、別法での一例です。

Sub Sample()
With Worksheets("Sheet1").Range("B2:B600")
 .FormulaLocal = "=IFERROR(VLOOKUP(A2,Sheet2!B:D,3,0),"""")"
 .Value = .Value
End With
End Sub
    • good
    • 1

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