0

2 つの Excel ファイルがあります。ファイル 1 をループして、6 つの異なる列を使用してファイル 2 の対応する行を見つけようとしています。VLOOKUP がこの複数の基準に対して機能するとは思わない。私はそれを行う方法について途方に暮れています。問題を別の方法で述べるために、ファイル 1 をループしています。列 F、G、H、I、J、K の値を使用 - 列 K、AK、A​​F、E を使用してファイル 2 で一致する行を見つけようとしています。 N、G。一致するものが見つかったら、データをファイル 2 からファイル 1 の対応する行に移動します。何かアイデアはありますか?

4

2 に答える 2

1

添付されたコードは列と一致します。転送を行うために更新できます

Sub MatchMultipleColumns()
Dim wbk1 As Workbook, wbk2 As Workbook
Dim sht1 As Worksheet, sht2 As Worksheet
Dim lLastRow As Long, lLoop As Long, rgFound As range, rgLastFound As range

Set wbk1 = Workbooks("file 1.xls")
Set wbk2 = Workbooks("file 2.xls")

Set sht1 = wbk1.Sheets(1)
Set sht2 = wbk2.Sheets(2)

lLastRow = sht1.Cells(Rows.Count, "F").End(xlUp)

For lLoop = 1 To lLastRow
    Set rgLastFound = sht2.Cells(1, "K")

tryAgain:
    Set rgFound = sht2.Columns("K").Find(What:=sht1.Cells(lLoop, "F"), After:=rgLastFound, LookIn:=xlFormulas, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)

    If rgFound Is Nothing Then GoTo nxtRow

    If sht2.Cells(rgFound.Row, "AK") = sht1.Cells(lLoop, "G") _
        And sht2.Cells(rgFound.Row, "AF") = sht1.Cells(lLoop, "H") _
        And sht2.Cells(rgFound.Row, "E") = sht1.Cells(lLoop, "I") _
        And sht2.Cells(rgFound.Row, "N") = sht1.Cells(lLoop, "J") _
        And sht2.Cells(rgFound.Row, "G") = sht1.Cells(lLoop, "K") Then

        'INSERT YOUR TRANSFER CODE HERE
        Debug.Print "Found match for row " & lLoop & " at row " & rgFound.Row
    Else
        set rgLastFound=rgFound
        GoTo tryAgain
    End If

nxtRow:
Next

End Sub
于 2012-09-25T16:14:03.380 に答える
0

私の理解が正しければ、vlookup の強力ないとこである index と match を使用することをお勧めします。私はシナリオについて少し混乱しているので、別の例が役立つかもしれませんが..

A1からA100までのリストでF1を見つけたいとします。=MATCH(F1,A1:A100,0) は、リスト A1:100 でテキスト F1 が見つかった場所を返します。

次に、index を使用してその値を返します。=インデックス(a1:a100,MATCH(F1,A1:A100,0))

F1 が「キーワード」で、それがリスト A1:100 の 7 番目の単語である場合、一致関数は 7 を返します。インデックス関数はキーワードを返します。

于 2012-09-25T15:47:09.807 に答える