如果excel宏中另外两列匹配,则比较两列
如果另外两列匹配,我想比较excel中的两列如果excel宏中另外两列匹配,则比较两列,excel,vba,Excel,Vba,如果另外两列匹配,我想比较excel中的两列 A B C D $10 1234D $40 100D $20 1235D $10 1234D $30 122D $20 1235D $40 1222D $30 1222D 首先我需要比较A列和C列,
A B C D
$10 1234D $40 100D
$20 1235D $10 1234D
$30 122D $20 1235D
$40 1222D $30 1222D
首先我需要比较A列和C列,如果在C列中找到任何匹配项,那么我需要比较B和D是否匹配。示例A中有$10,其ID为1234D。我需要比较C中的相同值。如果我在C中找到$10,但其ID不是1234D,我需要在另一列中显示不匹配的值
我可以如下匹配A和C。但我不知道如何在这之后比较B和D?我是excel vba新手,如果有人能帮我做到这一点,我将不胜感激
Function Find_Matches()
Dim CompareRange As Variant, SelectionRange As Variant, x As Variant, y As Variant
' compare the selection.
Sheets("Menu").Activate
Set SelectionRange = Range("A2:A6")
Set CompareRange = Range("C2:C6")
' Loop through each cell in the selection and compare it to
' each cell in CompareRange.
For Each x In SelectionRange
For Each y In CompareRange
If x = y Then x.Offset(0, 4) = True
Next y
Next x
End Function
'=concatenate(A2, B2)'
G2的公式是
'=concatenate(C2, D2)'
做你的vlookup的公式是
'=IF(ISNA(Vlookup(concatenate(a2, b2), $F$2:$G$<LastRowOfData>, 2, FALSE)), "", "Matches")
'=IF(ISNA(Vlookup(串联(a2,b2),$F$2:$G$,2,FALSE)),“”,“匹配”)
如果需要在vba中,可以设置宏来执行这些步骤
我需要以任何方式使用vba
使用此宏:
Sub Find_Matches()
Dim rng As Range
Set rng = Sheets("Menu").Range("A2:A6")
With rng.Offset(, 4) ' write result in column E
.FormulaArray = "=ISNUMBER(MATCH(" & rng.Address & "&""|""&" & _
rng.Offset(, 1).Address & "," & rng.Offset(, 2).Address & _
"&""|""&" & rng.Offset(, 3).Address & ",0))"
.Calculate
.Value = .Value
End With
End Sub
它将结果写入(True
或False
列E
)
说明:
E2:E6
数组公式中编写=ISNUMBER(MATCH($A$2:$A$6&“|”和$B$2:$B$6,$C$2:$C$6&“|”和$D$2:$D$6,0))
-如果我们在范围的任何一行C2
和B2
,例如C3
和D3
中找到,它将返回True
李>
.Value=.Value
零件用其结果重写公式A
和B
,并搜索列C
和D
的连接结果李>
&“|”&
?想象一下以下情况:从技术上讲,
A1和B1
和C1和D1
的串联会产生相同的结果:$101234D
,但我们清楚地看到没有匹配项。这就是为什么我在连接值时使用
作为delimeter:A1&“|”&B1
返回$101 | 234D
和C1&“|”&D1
返回$10 | 1234D
,它们不一样,因为我们需要它。使用宏而不是公式是有原因的吗?简单公式:=IF(和(如果(A2=C2,真,假),如果(B2=D2,真,假),真,假))
然后根据需要向下拖动公式。此外,如果需要比较多行,请考虑使用<代码> VLoopUp>代码>谢谢,但我需要用VBA来做。结果应该是什么?您只想在E列中输入True
/False
?谢谢您的想法。我将使用vba连接列,然后尝试进行匹配。我需要以任何方式使用vba。非常感谢您的回答,但如果我想在列E中写入D的值(而不是true或false),则如何更改此值?对于true
,返回的内容很清楚,但对于false
,您希望返回什么?在这种情况下,什么也找不到,应该退还什么?
A B C D
$101 234D $10 1234D