0

毎月、別の Excel ファイルとして保存される SAP データベースから 2 つのリストをエクスポートします。リスト A には、先月見つかったすべての欠陥が含まれています。リスト B には、外部ベンダーによって引き起こされたすべての欠陥が含まれています。完全なレポートになる前に ListA に対して多くの書式設定を行いますが、そのほとんどを完全に行うマクロがあります。リストの比較部分が機能していないようです。

私の手動プロセスは、リスト A に新しい列 D を挿入し、=VLOOKUP(A2,ListB!$A$2:$N$946,1,FALSE)セル D2 に入力して、最後までコピーすることです (ルックアップ テーブルの範囲は、リスト B のサイズによって異なります)。次に、リストをフィルタリングして「#N/A」を除外し、残りの行の「Cause」列 (現在は列 E) の値を「Vendor」に変更します。最後に、VLOOKUP 列を削除します。

このプロセスを自動化するのは簡単だと思っていましたが、いくつかの片頭痛がありました. このようにネストされた For ループを使用して作業を完了できましたが、もっと効率的な方法が必要だと感じています。

まず、For ループ内で Vlookup アプリケーション関数を試しました。

'ListA and ListB declared as Worksheets and set
Dim aRange as Range, bRange as Range
Dim last row As Integer
Set aRange = ListA.Range("A1")
Set aRange = Range(aRange, aRange.End(xlToRight))
Set aRange = Range(aRange, aRange.End(xlDown))
Set bRange = ListB.Range("A1")
Set bRange = Range(bRange, bRange.End(xlToRight))
Set bRange = Range(bRange, bRange.End(xlDown))

'I'm skipping over the stuff that would be here but don't need help with

lastrow = ListA.Range("A1").End(xlDown).Row
For i = 2 To lastrow
    ListA.Cells(i, 4).Value = Application.WorksheetFunction.VLookup(ListA.Cells(i, 1), bRange, 3, False)
    If ListA.Cells(i, 4).Value <> "#N/A" Then ListA.Cells(i, 5).Value = "Vendor"
Next i

残念ながら、このメソッドは、#N/A エラーを返す最初のセルで実行時エラーを検出しました。

2 回目の試行では、手動プロセスを実行しながらマクロを記録し、返されたコードを次のように変更してみました。

ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-3],Sheet1!R2C1:R946C14,1,FALSE)"
Range("D2").Select
Selection.AutoFill Destination:=Range("D2:D1033"), Type:=xlFillDefault
Range("D2:D1033").Select

これに:

Set aRange = ListA.Range("D2")
Set aRange = Range(aRange, aRange.End(xlDown))
Set bRange = ListB.Range("A1")
Set bRange = Range(bRange, bRange.End(xlToRight))
Set bRange = Range(bRange, bRange.End(xlDown))
Range("D2").FormulaR1C1 = "=VLOOKUP(RC[-3]," & bRange & ",1,FALSE)"
Range("D2").AutoFill Destination:=aRange, Type:=xlFillDefault

ランタイム エラーによると、型の不一致が原因で、このメソッドは機能していません。数式の途中で範囲変数を使用するのは好ましくないとしか思えませんが、ルックアップ テーブルが適切なサイズであることを確認する別の方法を知りません。

どんな助け(どのアプローチがより効率的か、これらのいずれかを機能させる方法、または私が考えていなかった別のアプローチでさえも)は大歓迎です。

4

1 に答える 1