2017-12-06 5 views
0

私は、これを動作させるために私の全体的なコードを書き直すために想像できるすべてのスレッドを読むために全力を尽くしました。Excel VBA - データをコピーしていないVLookup

状況:私はsheet2(スコア)のデータとsheet3(コメント)のデータを持っています。各シートには、列Aにチケット番号があります。スコアシートには、すべての可能なチケット番号が含まれています。 Commentsシートにはその合計のサブセットのみが含まれています(約50%)。コメントシートには2がありますが、一般的な既存の行(チケット番号)と一致するように検索する必要があります。そして、コメント列B(2)の値を取り出して列E(5)に貼り付けます。これはCSATサマリーシートであり、スコアシートのCol AD​​の内容を持っています。

以下は現在のコードです。私はVLOOKUPを削除し、ちょうど(例えば、「A」のような)変数を入れた場合、それは確かに私が行方不明ですない何

scores.UsedRange.Columns.Copy 
csatSum.Range("A1").Insert 
csatSum.Activate 
Set rng = csatSum.Range("A2:A" & lastRow) 
rngLastRow = Comments.Range("B2:B" & lastRow) 
For i = 2 To lastRow 
    On Error Resume Next 
    csatSum.Cells(i, 5) = WorksheetFunction.VLookup(rng, Comments.Range(rngLastRow), 2, False) 
    On Error GoTo 0 
Next i 

...一つ一つのライン上にあるものの、正しい欄にペーストAを行います。明らかに、それはVLookup自身の中にあるものです。しかし、私は迷っています。

+0

VLOOKUP関数の最初の引数は、単一の値でなければなりません。おそらく 'csatSum.Cells(i、1)'でしょう。 –

+0

私はそれが 'rngLastRow = Comments.Range(" B1:B "&lastRow)'であるべきだと思います。 VLookupの2番目のパラメータはルックアップテーブルでなければなりません。 –

+1

'rngLastRow = Comments.Range(" B2:B "&lastRow)'は​​配列を返すので、 'Comment.Range(rngLastRow)'は​​動作しません。それを範囲として設定し、それを呼び出す必要があります。 –

答えて

3

私はそれがあるべきだと思う:

scores.UsedRange.Columns.Copy 
csatSum.Range("A1").Insert 
'csatSum.Activate 
'Set rng = csatSum.Range("A2:A" & lastRow) 
Set rngLastRow = Comments.Range("A2:B" & lastRow) 
For i = 2 To lastRow 
    On Error Resume Next 
    csatSum.Cells(i, 5) = WorksheetFunction.VLookup(csatSum.Cells(i, 1), rngLastRow, 2, False) 
    On Error GoTo 0 
Next i 
+2

'rngLastRow'は二次元配列です(lastRow = 1の場合を除く) - これを' Range() 'に渡すことはできません代入に' Set'を追加すると範囲になります(そしてRangeでラップする必要はありません)) –

+0

OK、そうです。今セットを追加しました。 –

+0

コーチングのおかげで、ティムとスコット! –

関連する問題