[[20160622161553]] 『左右のセルの重複する内容を削除したい』(NITTA) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『左右のセルの重複する内容を削除したい』(NITTA)

5000行程あるのですが、
左右のセルで重複がある場合、右側の内容だけを削除したいのですが、方法がわかりません。

A1:abc
B1:abc
C1:abb

の場合、

A1:abc
B1:
C1:abb

としたいのです。

< 使用 Excel:Excel2013、使用 OS:MacOSX >


調べる対象は、A列とB列だけなのでしょうか? それともC列の後ろ、D列にも文字列が有るのでしょうか?

とりあえず実現方法としては、マクロを作成して、1行ずつA列とB列が一致するか確認し、一致していればB列のセルを""にする、というコーディングをしましょう。
(???) 2016/06/22(水) 16:43


 一例です。(データはA1から始まっているという前提です)
 なお、質問文には左右のセルで とありますが、サンプルでは、B列で重複があれば というようになっていますね。
 サンプルに合わせました。

 Sub Test()
    Dim wCol As Long

    With ActiveSheet.UsedRange
        wCol = .Columns.Count + 1
        .Columns(wCol).Formula = "=IF(COUNTIF(B$1:B1,B1)=1,B1,"""")"
        .Columns("B").Value = .Columns(wCol).Value
        .Columns(wCol).ClearContents
    End With

 End Sub

(β) 2016/06/22(水) 17:29


 あっ!!!!

 もしかしたら 本当に 【左右のセルで】ということだった?
 つまり、各行の各セルに、ずらっと abc abc abb ・・・・ と入っていて 重複があれば先行セルのみを残し
 後続の重複セルは空白?

 そうであれば、アップしたコードは忘れてください。
 後ほど改訂版をアップします。

(β) 2016/06/22(水) 17:35


 ↑の理解で改訂版です。アップ済みのものと同じく A1からリストが始まっているという理解です。

 Sub Test2()
    Dim dic As Object
    Dim v As Variant
    Dim i As Long
    Dim j As Long

    Set dic = CreateObject("Scripting.Dictionary")
    v = Range("A1").CurrentRegion

    For i = 1 To UBound(v, 1)
        dic.RemoveAll
        For j = 1 To UBound(v, 2)
            If dic.exists(v(i, j)) Then v(i, j) = Empty
            dic(v(i, j)) = True
        Next
    Next

    Range("A1").CurrentRegion.Value = v

 End Sub

(β) 2016/06/22(水) 17:43


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.