2017-01-17 9 views
1

空のセルに達するまでセルA7、A8、A9などから入力(13桁の数字)を取るマクロを作成し、これと別のブックでvlookupを実行します。別のブックのVLookup

しかし、私はちょうど#N/Aエラーを取得しています、そして、私はなぜうまくいかないのですか?

私の現在のコード:

Sub getData() 

Application.EnableEvents = False 
Application.ScreenUpdating = False 
Application.DisplayAlerts = False 
Application.Calculation = xlManual 

Dim wb As Workbook, src As Workbook 
Dim srcRange As Range 
Dim InputString 
Dim OutputString 
Dim i As Long 

Set wb = ActiveWorkbook 
Set src = Workbooks.Open("D:\Files\test1.csv", True, True) 
Set srcRange = src.Sheets(1).Range("A1:H1").End(xlDown) 

i = 7 

Do While wb.ActiveSheet.Cells(i, 1) <> "" 

    InputString = wb.Worksheets("Sheet 1").Cells(i, 1) 

    OutputString = Application.VLookup(InputString, srcRange, 3, False) 

    wb.Worksheets("Sheet 1").Cells(i, 2) = OutputString 

    i = i + 1 

Loop 


src.Close (False) 

Application.EnableEvents = True 
Application.ScreenUpdating = True 
Application.DisplayAlerts = True 
Application.Calculation = xlAutomatic 

End Sub 

私はそれは私が(「とInputString」)をアップしているよ参照は、「SRC」ファイルにカスタムフォーマット#0として定義されていることは注目に値すると思います。この問題があまりにも重要かどうかは分かりませんが、整数でなければなりませんか?

また、 "OutputString"は数値かテキストのどちらかになります。そのため私は意図的に未定義にしました。私はそれを 'Variant'、 'String'、 'Integer'として定義しようとしましたが、それは実際に何も変更されていません。

ありがとうございました。

+0

あなたの 'VLookup'は、1列幅に設定されている範囲の3列目にアクセスしようとしています。おそらく '' A1:A8 ''を '' A1:C8 ''に変更しますか? – YowE3K

+0

@ YowE3K - 申し訳ありませんが、私のテストスプレッドシートを使用しているときに私の部分にエラーがありました。私は修正するために編集しました。初期範囲を一番上の行に設定します。 –

+0

(a)シート "シート1"で処理しようとしている範囲で、アクティブシートの列Aのセルが空白でないことを確認したとします。 (例えば、アクティブシートがセルA7に何も持っていなかった場合、ループは "シート1"のセルA7にあったものを処理しません。 "シート1"のセルB7に "#N/A" (b)コードを踏んで、 'InputString'の値がどのように設定されているのか確認しましたか? (c)csvファイルにあなたが探している値が含まれていることを確認しましたか? – YowE3K

答えて

1

Set srcRange = src.Sheets(1).Range("A1:H1").End(xlDown)

これはあなたのコラムA、すなわちA20上の1つのセルの範囲を、取得します。 1つのセルにVLookupを実行することは無意味です。これはA1:H20のようなものに設定します

With Sheets(1) 
    Set srcRange = .Range("A1:H" & .Range("A1").End(xlDown).Row) 
End With 

:あなたはおそらく何を意味するのか

は、このでした。

+1

ありがとう!これは私が必要としていたものです。私は、何かが正しいかどうか、私が探していた場所(エラー以外の#N/Aを取得している)ではなく、範囲を正しく選択する方法がわからないことを解決しました。 –

+0

@WillCあなたは大歓迎です:) –

1

最初にsrcの範囲を変更する必要があります。これは実際には上から下の範囲ではなく下の行だけを取得するように設定されています。試してみてください

Set wb = ActiveWorkbook 
Set src = Workbooks.Open(""D:\Files\test1.csv", True, True) 
With src.Sheets(1) 
    Set srcRange = .Range(.Range("A1"), .Range("H1").End(xlDown)) 
End With 

第2に、私はCSVファイルがテキスト以外の13桁の数字をサポートするとは思いません。 VLOOKUPはテキストと一般的な数値の区別が非常に敏感なので、新しいsrcの範囲が役に立たない場合は、まずCStr()を使用して入力文字列を変換してみてください。

幸運を祈る!

+0

ありがとう、これは正しいです。私は問題が実際のVBAエラーではなく#N/Aであったが、範囲を正しく選択する方法を知らなかったため、問題が私の範囲にあったと思っていた。 私はvlookupと変数の型についてすべて知っています...だから私は当初それがそれに関係していると思ったのです。私は文字列を使用して動作することを望んでいる。 –

関連する問題