我的朋友有两列,其中一列具有唯一值,另一列具有相同的值但也重复,如下所示
Column 1 Column 2
ABC123 ABC123
CDE456 ABC123
EFG789 ABC123
ABC123
CDE456
CDE456
CDE456
EFG789
有时第 2 列并不总是包含所有值,在这种情况下,我认为只需要清楚地表明它们不存在于第 2 列中。他想要做的是,他希望第 1 列中的值移动到重复值列中相同值的行号,如下所示。
Column 1 Column 2
ABC123 ABC123
ABC123
ABC123
ABC123
CDE456 CDE456
CDE456
CDE456
EFG789 EFG789
有没有办法使用宏或内部 Excel 功能轻松地在 Excel 中完成此操作?
答案1
这满足了您的问题的要求。
Sub ShowStartingPoints()
Dim rowA As Integer
rowA = 1
Do While (Range("A" & rowA).Value <> "")
Dim row As Integer
row = 1
Dim doesValueExitInB As Boolean
doesValueExitInB = False
Dim valueA As String
valueA = Range("A" & rowA).Value
Do While (Range("B" & row).Value <> "")
If (valueA = Range("B" & row).Value) Then
Range("A" & rowA).Value = ""
Range("A" & row).Value = valueA
doesValueExitInB = True
Exit Do
End If
row = row + 1
Loop 'Loops B col
If Not doesValueExitInB Then
Range("C" & rowA) = Range("A" & rowA)
Range("A" & rowA) = ""
Range("C" & rowA).Interior.ColorIndex = 3
End If
rowA = rowA + 1
Loop ' loops A col
End Sub
宏之前
宏之后
这会存在一些问题,您的示例不会注意到这些问题。如果您在 A 列中有一个长列表(如我所示),您将覆盖数据,因为一个值会替换另一个值!
请注意,在第一个屏幕截图中,A5 的值为 No。这也是 CDE456 在 B5 中的起始位置。因此,我们检查 A3 的值在 B 列中的起始位置。ColB 中的 CDE456 从第 5 行开始,因此它被移动到 A5(根据您在问题中的要求)... Kaboom,我们刚刚覆盖了一个值。但是,您的问题没有提到这一点,因此我认为这不是问题(另外,您始终可以根据自己的需要调整代码)。