如何创建嵌套循环以检查第二个列表中是否存在值

时间:2019-04-25 12:33:18

标签: excel vba

我正在尝试比较两个列表中的值。我希望我的代码比较第一个列表中的值,并检查第二个列表中的所有条目。如果存在匹配项,则代码将在第一个列表中的值旁边显示true,否则显示false。

我遇到的问题是我的代码仅比较同一行中的值。

代码运行,并且我在两个较小的列表上进行了尝试,以确保数据类型相同,并且列表中没有任何多余的空格或逗号会导致“ False”输出。我也尝试过更改for和if语句的顺序,但这也不起作用。

Sub findvalues()
    For i = 2 To 16
        For j = 2 To 16
            If Cells(i, 3).Value = Cells(i, 1).Value Then
                Cells(i, 4).Value = "TRUE"
            ElseIf Cells(i, 3).Value = Cells(j + 1, 1).Value Then
                Cells(i, 4).Value = "TRUE"
            Else
                Cells(i, 4).Value = "FALSE"
            End If
        Next j
    Next i
End Sub

Here are the two lists I am testing the code on

4 个答案:

答案 0 :(得分:2)

根据您在第1列和第3列中提供的数据对代码进行少量修改。像往常一样,可以进行一些改进,但这应该可以帮助您...

Sub findvalues()
    Dim i As Long, j As Long, bResult As Boolean

    For i = 2 To 16
        strValueToLookFor = Cells(i, 1)

        For j = 2 To 16
            bResult = False

            If strValueToLookFor = Cells(j, 3).Value Then
                bResult = True
                Exit For
            End If
        Next j

        Cells(i, 6).Value = bResult
    Next i
End Sub

...您可能只需要翻动各列,以便第一个列表在第二个列表上搜索,反之亦然。

答案 1 :(得分:2)

我看不到需要VBA-可以使用公式-但要避免两个循环,可以这样做:

Sub findvalues()

Dim i As Long

For i = 2 To 130
    Cells(i, 4).Value = IsNumeric(Application.Match(Cells(i, 1).Value, Range("C2:C130"), 0))
Next i

End Sub

更新:这不能满足多个匹配项。

答案 2 :(得分:0)

要实现这一目标有很多。其中之一是使用 IF COUNTIF

公式

.test_test

结果:

enter image description here

VBA代码

=IF(COUNTIF($E$2:$E$6,A2)>0,"TRUE","FALSE")

答案 3 :(得分:0)

VBA代码可协调两个列表。

 Sub Reconciliation()
Dim endRow As Long
Dim ICount As Long
Dim Match1() As Variant
Dim Match2() As Variant
Dim ws As Worksheet
Set ws = Worksheets("Recon")
ICount = 0
endRow = ws.Cells(ws.Rows.Count, 2).End(xlUp).Row
endRow1 = ws.Cells(ws.Rows.Count, 11).End(xlUp).Row
Match1 = Sheet1.Range("b2:b" & endRow)
Match2 = Sheet1.Range("K2:K" & endRow1)

For i = LBound(Match1) To UBound(Match1)
For j = LBound(Match2) To UBound(Match2)
    If Match1(i, 1) = Match2(j, 1) Then
    ICount = ICount + 1
        Sheet1.Range("C" & i + 1).Value = ICount
        Sheet1.Range("L" & j + 1).Value = ICount
    Else

   End If
   Next j
Next i
End Sub