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

时间:2014-04-10 03:23:40

标签: excel excel-vba vba

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

A          B            C            D
$10      1234D          $40          100D
$20      1235D          $10          1234D 
$30       122D          $20          1235D 
$40      1222D          $30          1222D 

首先我需要比较col A和C如果在col C中找到任何匹配,那么我需要比较B和D匹配。示例I在A中有10美元,其ID为1234D.i需要比较C中的相同值。如果我在C中找到10美元但其ID不是1234D我需要在另一列中显示不匹配的一个。

我可以匹配A和C,如下所示。但是之后我对如何比较B和D感到困惑?我是excel vba的新手,并感谢任何人帮助我这样做。< / p>

  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

2 个答案:

答案 0 :(得分:1)

  

我需要以任何方式使用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列中写入结果(FalseE)。

<强>解释

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

  6. A          B            C            D
    $101      234D          $10          1234D
    

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

答案 1 :(得分:0)

  1. 需要是否在vba中? 2.你怎么做才能证明有比赛或半场比赛?
  2. 在F中创建一个新列,它是A&amp; A的串联B.在G栏中做同样的事情以连接C&amp; C中的值。 d。

    然后使用一个使用VLookup的公式来查看是否查找A&amp; 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中,您可以设置一个宏来执行这些步骤。