2016-10-11 17 views
0

スクリプトに何が間違っているのかは分かりませんでした。全く難しくないようですので、ここで答えを見つけることを願っています。Vlookup + Iferror in VBAエラー "1004"

私は2枚のシート(Sheet1とSheet2)を持っていますが、どちらも時間の経過と共に変化するリストです(sheet1からの情報は毎回sheet2で削除されます)。私は、シート1にあるすべての行に対してvlookup関数を実行し、そのエントリがsheet2に存在しない場合は "new"(28番目の列)を返したいとします。

iferrorに関して常に1004エラーが発生するので、コードに何か問題があります。& vlookup機能。

事前のおかげで、

Sub vlookup_iferror() 
Dim i As Integer 
Dim finalrow As Integer 

finalrow = Sheets("Sheet1").Range("A100000").End(xlUp).Row 

    For i = 2 To finalrow 
    Cells(i, 28) = Application.IfError(Application.VLookup(Sheets("Sheet1").Range("i, 2"), Sheets("Sheet2").Range("B:B"), 1, False), "New") 
    Next i 
End sub 
+0

適切な構文はApplication.WorksheetFunction.IFERROR()などです。このようにしたい理由は、.Range()。Find()を使用するのではなく、もっと長い時間がかかります。 Sheets(1).Cells(Sheets(1).Rows.Count、1).End(xlUp).Rowのように最後の行を動的に見つけることができます。 – Tyeler

答えて

3

Sheets("Sheet1").Range("i, 2")が無効な範囲の割り当てであるため、あなたは1004を取得しています。

Range("i, 2")Cells(i, 2)

Rangeアドレス引数(例えば、Range("A1")又はRange("B" & i)、など)をとるべきであり、Cellsは(/カラムインデックス引数を取る:それを修正する

例えば、Cells(1,2)など)。

+1

それは 'Cells(i、2)'ではないでしょうか? – arcadeprecinct

+0

@arcadeprecinctはいそうだと思います。それをキャッチしてくれてありがとう –

+0

ありがとう!完璧に動作し、情報のおかげで、将来的には間違いなく助けになります。 – Skudra21

0

ループの範囲を確認してください。文字列でなければなりません。 "i"を文字列として使用すると、変数としてそこに存在するはずです。