如果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列,

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

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
  • 是否需要在vba中?2.你是怎么做的,以显示有一场比赛或半场比赛
  • 在F中创建一个新列,该列是a和B的串联。在G列中执行相同操作以串联C和D中的值

    然后使用一个使用VLookup的公式来查看查找a&B的串联是否返回“N/a”错误。如果为false,则有一个匹配的列

    因此,F2的公式是

    '=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