如果在Excelmacros中另外两列匹配,则比较两列

我想比较Excel中的两列,如果另外两列匹配。

ABCD $10 1234D $40 100D $20 1235D $10 1234D $30 122D $20 1235D $40 1222D $30 1222D 

首先我需要比较col A和C如果在col C中find任何匹配,那么我需要比较B和D匹配。 示例我有$ 10在A和它的ID是1234D.i需要比较相同的值在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 

  1. 需要在vba中吗? 2.你做什么来表明比赛或半场比赛?

在F中创build一个新的列,它是A和B的连接。在G列中做相同的连接C和D中的值。

然后使用一个使用VLookup的公式来查看A和B的连接是否返回“N / A”错误。 如果这是错误的,你有一个匹配的列。

所以F2的公式是

 '=concatenate(A2, B2)' 

G2的公式是

 '=concatenate(C2, D2)' 

并做你的vlookup的公式是

 '=IF(ISNA(Vlookup(concatenate(a2, b2), $F$2:$G$<LastRowOfData>, 2, FALSE)), "", "Matches") 

如果需要在vba中,您可以设置一个macros来执行这些步骤。

我需要用任何方式使用vba。

使用这个macros:

 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 

它将结果写入(在E列中为TrueFalse )。

说明:

  1. 主要思想是用公式确定结果,然后用结果值重写公式。
  2. 我们所做的是写在E2:E6数组公式中
    =ISNUMBER(MATCH($A$2:$A$6 & "|" & $B$2:$B$6,$C$2:$C$6 & "|" & $D$2:$D$6,0)) – it如果在范围C2:D6任何一行中findA2B2 ,则返回True C2:D6 ,例如C3D3
  3. .Value = .Value部分用他们的结果重写公式
  4. 怎么运行的? 公式连接列AB并在CD列连接search结果。
  5. 为什么我们使用& "|" & 在公式中? 想象一下下面的坐标:

 ABCD $101 234D $10 1234D 

从技术上讲, A1 & B1以及C1 & D1给出了相同的结果: $101234D ,但我们清楚地看到没有匹配。 这就是我使用|的原因 作为连接值时的分隔符: A1 & "|" & B1 A1 & "|" & B1返回$101|234DC1 & "|" & D1 C1 & "|" & D1返回$10|1234D ,他们是不一样的,因为我们需要它。