0

我有两个excel文件。我正在循环通过文件 1 并尝试使用 6 个不同的列在文件 2 中找到相应的行。我认为 VLOOKUP 不适用于这个多重标准。我不知道该怎么做。为了以不同的方式陈述问题,我正在遍历文件 1。使用 cols F、G、H、I、J、K 中的值 - 我试图使用 cols 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 的强大表亲。我对这种情况有点困惑,所以另一个例子可能会有所帮助,但是..

假设您想在列表 A1 到 A100 中找到 F1。=MATCH(F1,A1:A100,0) 将返回在列表 A1:100 中找到文本 F1 的位置

然后使用 index 返回该值。=索引(a1:a100,匹配(F1,A1:A100,0))

如果 F1 是“关键字”并且它是列表中的第七个单词 A1:100 匹配函数返回 7 索引函数返回关键字

于 2012-09-25T15:47:09.807 回答