ある列の一意の値を別の列の同じ値にシフトするにはどうすればよいでしょうか?

ある列の一意の値を別の列の同じ値にシフトするにはどうすればよいでしょうか?

私の友人には2つの列があり、1つは一意の値を持ち、もう1つの列は同じ値を持ちますが、以下に示すように重複しています。

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 であることに注意してください。これは、B5 で CDE456 が始まる場所でもあります。したがって、列 B で A3 の値がどこから始まるかを確認します。ColB の CDE456 は行 5 から始まるため、A5 に移動されます (質問のリクエストどおり)... やれやれ、値を上書きしてしまいました。ただし、質問ではこれについて触れられていないため、問題ではないと想定します (さらに、必要に応じてコードをいつでも調整できます)。

関連情報