根据两个条件查找单元格值(文本)

时间:2018-06-07 19:55:46

标签: excel excel-vba formula vba

我下午的大部分时间都在寻找一种基于两列返回单元格中文本值的方法。我希望匹配Sheet1,A列和A列的值。 F到sheet2,将这两个匹配的列B中的值返回到表1中。

要想象:

   Sheet 1                      Sheet 2


 A           F                A       B        F

 x           b                x       c        y
 x           g                x       k        b

有没有办法使用VLOOKUP执行此操作,我错过了?我很自信我错过了一些简单的东西,但这让我很难过。

提前致谢!

2 个答案:

答案 0 :(得分:0)

试试这段代码,它对我有用:

Option Explicit
Sub test()


' Active workbook
Dim wb As Workbook
Set wb = ThisWorkbook
Dim i As Long
Dim j As Long

'*******************************************
'Adapt this vars


'define your sheets
Dim ws_1 As Worksheet
Dim ws_2 As Worksheet
Set ws_1 = wb.Sheets("Feuil1") 'change name of the sheet to complete
Set ws_2 = wb.Sheets("Feuil2") 'change name of the sheet with all data

'definie the last Rows
Dim lastRow_ws1 As Long
Dim lastRow_ws2 As Long

lastRow_ws1 = ws_1.Range("A" & Rows.Count).End(xlUp).Row + 1 'if you need, adjust column to find last row
lastRow_ws2 = ws_2.Range("A" & Rows.Count).End(xlUp).Row + 1 'if you need, adjust column to find last row
'*******************************************

Dim keyMach1 As String
Dim keyMach2 As String

For j = 1 To lastRow_ws1

    For i = 1 To lastRow_ws2

    Dim keySearch As String
    Dim keyFind As String

    keySearch = ws_1.Cells(j, 1).Value & ws_1.Cells(j, 6).Value 'I concat both cell to create o key for the search
    keyFind = ws_2.Cells(i, 1).Value & ws_1.Cells(i, 6).Value ' idem to match

    If keySearch = keyFind Then
         ws_1.Cells(j, 2).Value = ws_2.Cells(i, 2).Value
    End If


    Next i

Next j

End Sub

答案 1 :(得分:0)

以下下标完全符合您的要求:

Sub DoThaThing()
    Dim i As Long, lastRow1 As Long
    Dim Sheet1A As Variant, Sheet1F As Variant, firstFound As String
    Dim findData As Range
    lastRow1 = Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row
    For i = 1 To lastRow1 Step 1
        Sheet1A = Sheets("Sheet1").Cells(i, "A").Value
        Sheet1F = Sheets("Sheet1").Cells(i, "F").Value
        Set findData = Sheets("Sheet2").Columns("A:A").Find(What:=Sheet1A, _
                       After:=Sheets("Sheet2").Range("A1"), _
                       LookIn:=xlValues, _
                       LookAt:=xlWhole, _
                       SearchOrder:=xlByColumns, _
                       SearchDirection:=xlNext, _
                       MatchCase:=False, _
                       SearchFormat:=False)
        If Not findData Is Nothing Then
            'First instance found, loop if needed
            firstFound = findData.Address
            Do
            'Found, check Column F (5 columns over with offset)
                If findData.Offset(0, 5).Value = Sheet1F Then
                    'A and F match get data from B (1 column over with offset)
                    Sheets("Sheet1").Cells(i, "B").Value = findData.Offset(0, 1).Value
                    Exit Do
                Else
                    'F doesnt match, search next and recheck
                    Set findData = Sheets("Sheet2").Columns("A:A").FindNext(findData)
                End If
            Loop While Not findData Is Nothing And firstFound <> findData.Address
        Else
            'Value on Sheet 1 Column A was not found on Sheet 2 Column A
            Sheets("Sheet1").Cells(i, "B").Value = "NOT FOUND"
        End If
    Next
End Sub

编辑:固定无限循环。