2017-07-11 6 views
0

私のワークブックに複数のデータシートが含まれている大規模なデータセットで作業していて、シート「SAP」から取得したシート「URR」の列を使用して関連するデータをVlookupしたい引く"。したがって、SAP Pullはすべてのデータを含むマスターシートであり、URRには関連するデータの列が含まれています。関連するデータの列をSAP Pullにコピーし、vlookupループを作成して列の各行に対応するデータを見つけようとします。問題は、object'_WorksheetのMethod 'range'というエラーがスローされ続けることです。なぜ私はこの問題が続くのか混乱しているので、ここに私のコードです。VBA Vlookupループの問題

Dim wsThis As Worksheet 
Dim aCell As Range 

Sheets("URR").Columns(1).copy Destination:=Sheets("SAP Pull").Columns(22) 
Set wsThis = Sheets("SAP Pull") 
    With wsThis 
     For Each aCell In .Range("V2:V") 
      .Cells(aCell.Row, 23) = Application.WorksheetFunction.VLookup(_ 
           aCell.Value, wsThat.Range("A2:D3500"), False) 
      Next aCell 
     End With 
End Sub 

答えて

0

返されたい列をExcelに伝える第3の基準がありませんでした。

aCell.ValuewsThat.Range("A2:D3500")に見つからない場合は、値が見つからない場合でもコードを停止します。

何らかの方法でエラーをトラップする必要があります。

Dim wsThis As Worksheet 
Dim aCell As Range 

Sheets("URR").Columns(1).copy Destination:=Sheets("SAP Pull").Columns(22) 
Set wsThis = Sheets("SAP Pull") 
    With wsThis 
     For Each aCell In .Range("V2:V65000") 
      .Cells(aCell.Row, 23) = "Not Found" 
      On Error Resume Next 
      .Cells(aCell.Row, 23) = Application.WorksheetFunction.VLookup(_ 
           aCell.Value, wsThat.Range("A2:D3500"),4, False) 
      On Error Goto 0 
     Next aCell 
    End With 
End Sub 

これは、各セルにNot Foundを置く、その値が範囲内に見つかった場合は、フィールド内の列Dの値を入れます。

+0

ありがとうございます! 3番目の基準が私の心をちょっとスリップしたように見えます。さらに、wsThatが自分のコードに存在しないことを認識しました。シートの切り替えに使用されましたが、問題を解決するためにすべてのデータを1つのシートに移動しただけで、現在はwsThisです。残念ながら、このエラーはFor Each aCell In .Range( "V2:V")の行に続き、なぜ私は不明です。追加の編集が役立ちます!再度、感謝します。 – Shin

+0

@Shin編集を参照してください。 '65000'を最大の範囲に変更することができます。 –

+0

こんにちは、私はその問題を理解しています、V2:Vは、最大範囲が可変であるため、次の行に値が見つからなくなるまで、列全体にわたり私を連れて行くことを望んでいました。さらに、何らかの理由でvlookupが約10のインスタンスに対して「見つからない」という結果を返しています。なぜなら、それらがA2:D3500の範囲内にあるためです。 – Shin

0

VlookUpにStatementがありません。

.Cells(aCell.Row, 23) = Application.WorksheetFunction.VLookup(_ 
           aCell.Value, wsThat.Range("A2:D3500"),2, False) 

3番目のステートメントは返される列です。