我有两列重叠的数据,看起来像这样:
-------------------------
| 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