[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『重複している名前を2名分とも削除したい』(ひゆ)
ここに書き込むのは2度目になります。
どうぞ、宜しくお願い致します。
膨大な量の名前があります。
あいうえお順でもなくバラバラで2万件ほどあります。
この膨大な量のデータの中から重複している名前を
削除したいのです。
例えば、5行目に“田中太郎”、500件目に“田中太郎”とあったとしても、
画面をスクロールしていくか、昇降順にして並べかえでも
しなければ、そこに“田中太郎”が2名分あることはわかりませんよね?
そこで初めて2名あることが分かり、5行目と500行目を
削除するという・・・・・。
そんな手作業で1名づつ削除していくのは気が遠くなる様な作業です。
重複している名前を2名とも、もしくは3名、4名とデータ中には
存在しているかもしれませんので、もう少し効率よくできる、
何か良い方法はないでしょうか?
どうぞ、宜しくお願い致します。
[[20020701122019]] 『選択範囲にある重複した文字列に色をつけたい』(ヨシダ)
尋さんの条件式を参考に案内した例があります。
参考にして下さい。
(シニア)
[[20020701122019]] 『選択範囲にある重複した文字列に色をつけたい』(ヨシダ)
のケースも参考になりました。
が、この場合2名分同じ名前が見付かったとしても1名分しか色付け
されませんよね?
私の場合、2名分とも削除してしまいたいのです。
3名分、重複していたりもするので、手作業でやっていくと、
昇降順に並べ替えたりして目で見て、探して確認して削除と。。。
果てしない工程の繰り返しなので、何か良い方法は無いでしょうか?
度々、すみませんが宜しくお願い致します。(ひゆ)
例えば、重複セルがB2以降であれば、B2を選択し、Shift+End+↓で範囲を選択後
「条件付き書式」で「数式が」「=countif($B$2:B2,B2)>1」【書式】でパターン色をしていすれば
同一人が3データの時最初のデータは1、2番目のデータは2、3番目のデータは3になります。
条件式が1より大きい場合ですから、2番目、3番目のデータに色がつきます。
従って、着色されたセルを削除すればよいことになります。
B列の右隣に列挿入して、=countif($B$2:B2,B2) の式を入力し、
このセルのフィルハンドルをダブルクリックすれば一瞬に式がコピーされます。
この列を昇順に並べ替えれば、2以上のデータは重複していることになります。
削除する場合に同姓同名の方には注意して下さい。
同一人であっても入力データが違う場合があります。名前の前後に空白があったり、
途中の空白が全角1文字と半角2文字では別人になってしまいます。
TRIM関数で空白は補正できますが、文字違いの渡辺と渡邊は別人扱いです。
データーの統一がなされて入れば正常に機能します。
(シニア)
こんばんは
「重複データは全て削除」ですと
どういったデータを削除したか記録に残りませんが良いのでしょうか?
マクロでやれば可能なように思いますが・・・・・・・
(尋)
尋さんこんばんは
尋さんには毎回フォローして頂き、大変助かっています。
私もマクロ処理プログラムの記述を勉強中なので、是非紹介して下さい。
お願いします。
(シニア)
データがダブっているものをすべて見つけるExcel-VBAです。
(1)下のVBAを丸ごと(Dim からEnd Functionまで)コピーします
(2)[ツール]メニュー→[マクロ(M)]→[VisualBasicEditor(V)]を選択
(3)[挿入(I)]メニュー[標準モジュール(M)]
(4)白い画面になります
(5)白いとことの一番上をクリックして[貼り付け]します。
(6)[ファイル]メニュー→[終了してMicrosoftExcelに戻る]を選択
(7)Excelのワークシートに戻ります
(8)[ツール]メニュー→[マクロ(M)]→[マクロ(M)]でDuplicateScratchを選択
(9)実行ボタンを押す。
少し長いVBAですが、これで、A列にある名前をすべて調べてダブっている場合
B列にダブっていますのマークがつきます。
あとはダブリのところで[並べ替え]ればらくらく削除ができます。
<実行結果>
名前 ダブリ
ひゆ
kazu kazu001
尋 尋001
kazu kazu002
尋 尋002
kazu kazu003
kazu kazu004
シニア
naka naka001
naka naka002
たぬき
(kazu)
Dim nameData(10000) As Variant, nameDataCnt(10000) As Integer
Dim nameCnt As Integer
Sub DuplicateScratch()
' データのダブリを見つける 2002/09/07 Create By.kazu
Dim maxRow As Integer, r As Integer, ndat As Variant, k As Integer
Dim m As Integer
Dim nameCol As Integer, markCol As Integer
nameCol = 1 '対象データはA列
markCol = 2 'マークをつけるのはB列
ActiveSheet.Cells(1, nameCol).Select
ActiveSheet.Cells(1, markCol) = "ダブリ"
Selection.SpecialCells(xlCellTypeLastCell).Select
maxRow = Selection().Row
nameCnt = 0
For k = 0 To maxRow
nameData(k) = ""
nameDataCnt(k) = 2
Next k
For r = 2 To maxRow
ndat = ActiveSheet.Cells(r, nameCol)
If Len(ndat) > 0 Then
ret = UFsearchName(ndat)
If ret > 0 Then
ActiveSheet.Cells(r, markCol) = _
ndat & Format(nameDataCnt(ret), "000")
If nameDataCnt(ret) = 2 Then
For m = 2 To r
If ndat = ActiveSheet.Cells(m, nameCol) Then
ActiveSheet.Cells(m, markCol) = ndat & "001"
Exit For
End If
Next m
End If
UFcntUp (ret)
End If
Else
Exit For
End If
Next r
End Sub
Function UFsearchName(indata)
Dim k As Integer
UFsearchName = 0
For k = 0 To nameCnt
If indata = nameData(k) Then
UFsearchName = k
Exit Function
End If
Next k
nameCnt = nameCnt + 1
nameData(nameCnt) = indata
End Function
Function UFcntUp(no)
nameDataCnt(no) = nameDataCnt(no) + 1
End Function
kazuさん早速マクロ紹介して頂き有難う御座います。
VBA以前のBasicを思い出しながら、VBAに挑戦します。
今後共宜しくご指導の程お願いします。
(シニア)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.