前提・実現したいこと
範囲内で重複しているデータを一意にしたい。セルは詰めないで空欄にしたい。
おしえてgoo で以下のような質問があったのですが↓
VBAで重複するデータがあれば1個だけ残して他の重複セルを""(空白)にしたいのですが
範囲D5:D36に重複するデータがあれば、
1個だけ残して、他の重複セルに""(空白)を書き込みたいのですが
VBAではどう書けばよいでしょうか
D5:D36に下記のような空白を含むデータがあった時に
山田と書かれたセルは2つあるので、ひとつ残して、もうひとつは空白にしたいです
同じように高橋は3つあるので、ひとつ残して、あとの2つは空白にしたいです
山田
高橋
佐藤
空白
空白
鈴木
山田
空白
高橋
高橋
ベストアンサーはこれでした↓
詰めないで良いのですね?
この位ならば Dictionary 機能を使わなくてもどうにかなりそうだけど、行が増えた時に圧倒的に早くなりますので覚えておくと便利です。
Sub Sample()
Dim 辞書 As Object
Dim 行 As Long
Application.ScreenUpdating = False
Set 辞書 = CreateObject("Scripting.Dictionary")
For 行 = 5 To 36
If 辞書.Exists(Cells(行, 4).Text) Then
Cells(行, 4).ClearContents
Else
辞書.Add Cells(行, 4).Text, 行
End If
Next
Set 辞書 = Nothing
Application.ScreenUpdating = True
End Sub
###私の質問なんですが、 一列だけではなく範囲内の重複を検索して一意だけ残して他を空欄にしたい。
おそらくやりたいことは一致しているのですが質問は一列だけを検索しており、一列以上、たとえばA3セル~C8セルの範囲内で同じことをしたい場合はどのようにかきかえたらよいのでしょうか。
一意が残れば空白に変換する重複データはどこのでもかまいません。
空白 空白 空白
空白 空白 空白
山田 高橋 高橋
山田 佐藤 佐藤
鈴木 高橋 高橋
山田 鈴木 山田
高橋 佐藤 高橋
高橋 鈴木 高橋
ちなみにexcelの機能の重複の削除ですとセルを詰めてしまうのでやりたいことに使えないのです…。
補足情報(FW/ツールのバージョンなど)
excel2010
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。