如何在Excel中将重复项对齐到同一行?

13

我无法回答这个简单的问题。

我在Excel中有两列数据,如下:

Col1    Col2
 A       C
 B       I
 C       E
 D       D
 E       A
 F       F
 G       B
 H       
 I       

我想对这两列进行排序,使得相同的值在两列中对齐在同一行上,例如:

Col1    Col2
 A       A
 B       B
 C       C
 D       D
 E       E
 F       F
 G       
 H       
 I       I
 K       

到目前为止,我已经尝试了以下VBA代码:

 Sub HighlightDups()
    Dim i, LastRowA, LastRowB
    LastRowA = Range("A" & Rows.Count).End(xlUp).Row
    LastRowB = Range("B" & Rows.Count).End(xlUp).Row
    Columns("A:A").Interior.ColorIndex = xlNone
    Columns("B:B").Interior.ColorIndex = xlNone
    For i = 1 To LastRowA
        If Application.CountIf(Range("B:B"), Cells(i, "A")) > 0 Then
            Cells(i, "A").Interior.ColorIndex = 36
        End If
    Next
    For i = 1 To LastRowB
        If Application.CountIf(Range("A:A"), Cells(i, "B")) > 0 Then
            Cells(i, "B").Interior.ColorIndex = 36
        End If
    Next
End Sub

但是这段代码只是帮助查找重复项,并未将两列中的重复项放在同一行。

我想知道你们是否能够提供一点帮助呢?

非常感谢。

2个回答

38

不使用 VBA

  • 在 B 列中插入一个空白列
  • 在 B1 中输入 =IF(ISNA(MATCH(A1,C:C,0)),"",INDEX(C:C,MATCH(A1,C:C,0))) 并向下复制
  • 将列 B 复制并粘贴回自身作为值以删除公式

使用 VBA

Sub Macro1()
    Dim rng1 As Range
    Set rng1 = Range([a1], Cells(Rows.Count, "A").End(xlUp))
    rng1.Offset(0, 1).Columns.Insert
    With rng1.Offset(0, 1)
        .FormulaR1C1 = _
        "=IF(ISNA(MATCH(RC[-1],C[1],0)),"""",INDEX(C[1],MATCH(RC[-1],C[1],0)))"
        .Value = .Value
    End With
End Sub

1
太棒了!你的VBA代码完美解决了问题。非常感谢你。 - Niamh Doyle
虽然答案与问题相关,但如果您的子程序能够反向检查并返回列之间的公共值,那就太好了。不在列之间共同存在的值应该放置在下面或其他替代位置。例如,如果col2有一个col1没有的新值,则使用此公式/子程序将丢弃col2的该值。 - SIslam

-1

不使用VBA

  • 在C1单元格中输入=VLOOKUP(A:A,B:B,1)
  • 如果你有多列,可以在E1单元格中输入=VLOOKUP(A:A,B:D,2) .... 最后一个数字应该相应地改为1(B列),2(C列)或3(D列)。

你需要将此复制并粘贴到每个数组中,以便在相应的列中查找,但你应该能够轻松地将其复制并向下粘贴到一列中。

希望这可以帮助你。如果你有任何问题,请告诉我。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接