我正在尝试比较两个列表中的值。我希望我的代码比较第一个列表中的值,并检查第二个列表中的所有条目。如果存在匹配项,则代码将在第一个列表中的值旁边显示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
答案 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)
答案 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