私の友人には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 に移動されます (質問のリクエストどおり)... やれやれ、値を上書きしてしまいました。ただし、質問ではこれについて触れられていないため、問題ではないと想定します (さらに、必要に応じてコードをいつでも調整できます)。