如何将一列中的唯一值向下移动到另一列中的相同值?

如何将一列中的唯一值向下移动到另一列中的相同值?

我的朋友有两列,其中一列具有唯一值,另一列具有相同的值但也重复,如下所示

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,我们刚刚覆盖了一个值。但是,您的问题没有提到这一点,因此我认为这不是问题(另外,您始终可以根据自己的需要调整代码)。

相关内容