Excel:如何对齐两列之间的匹配值并消除差异

Excel:如何对齐两列之间的匹配值并消除差异

我有两列重叠的数据,看起来像这样:

-------------------------
| Aardvarks  | Bears    |
| Bears      | Dogs     |
| Cats       | Giraffes |
| Giraffes   | Hippos   |
| Monkeys    | Rhinos   |
| Rhinos     | Zebras   |
-------------------------

有什么方法可以对齐两列之间的匹配值,同时在存在差异的地方添加空白单元格,以便得到这样的最终结果:

-------------------------
| Aardvarks |           |
| Bears     | Bears     |
| Cats      |           |
|           | Dogs      |
| Giraffes  | Giraffes  |
|           | Hippos    |
| Monkeys   |           |
| Rhinos    | Rhinos    |
|           | Zebras    |
-------------------------

我看到有人在这里问类似的问题,但都依赖于列A具有某种“完整”数据和 B 列具有需要排序的不完整数据。

我的问题是两列都有重复和唯一的数据(在上面的例子中,列A没有包含所有的动物)。

是否有某种方法可以对齐和排列列以获得我想要的最终结果?

答案1

很抱歉浪费大家的时间,但在网上搜索之后,我找到了解决我自己的问题的方法。

我发现下面的这个网站提供了针对我所面临问题的 VBA 解决方案。该脚本完美地实现了我希望实现的目标。

http://sites.madrocketscientist.com/jerrybeaucaires-excelassistant/text-functions/line-up-matches

答案2

该网站似乎已关闭...幸好我去年保存了有用的 VB

Option Explicit

Sub LineEmUp()
'Author:    Jerry Beaucaire
'Date:      7/5/2010
'Summary:   Line up a random number of columns so all matching
'           items are on the same rows
Dim LC  As Long
Dim Col As Long
Dim LR  As Long
Application.ScreenUpdating = False

'Spot last column of data
    LC = Cells(1, Columns.Count).End(xlToLeft).Column

'Add new key column  to collect unique values
    Cells(1, LC + 1) = "Key"
    For Col = 1 To LC
        Range(Cells(2, Col), Cells(Rows.Count, Col)).SpecialCells(xlConstants).Copy _
           Cells(Rows.Count, LC + 1).End(xlUp).Offset(1)
    Next Col

    Columns(LC + 1).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Cells(1, LC + 2), Unique:=True
    Columns(LC + 2).Sort Key1:=Cells(2, LC + 2), Order1:=xlAscending, Header:=xlYes

'Fill in new table headers w/formatting
    Range("A1", Cells(1, LC)).Copy Cells(1, LC + 3)

'Fill in new table values
    LR = Cells(Rows.Count, LC + 2).End(xlUp).Row
    With Range(Cells(2, LC + 3), Cells(LR, LC + 2 + LC))
        .FormulaR1C1 = "=IF(ISNUMBER(MATCH(RC" & LC + 2 & ",C[-" & LC + 2 _
                        & "],0)), RC" & LC + 2 & ", """")"
        .Value = .Value
    End With

'Cleanup/Erase old values
    Range("A1", Cells(1, LC + 2)).EntireColumn.Delete xlShiftToLeft
    Columns.Autofit
    Application.ScreenUpdating = True
End Sub

相关内容