プロが教えるわが家の防犯対策術!

名前と郵便番号を繋げて同一判別キー(G列)を作り、ソートをかけました。

■同一判定キー ■名前  ■フリガナ ■電話       ■郵便番号   ■住所
田中123-1234  田中                  123-1234
田中123-1234  田中        0X0-1X34-1234  123-1234
田中123-1234  田中  タナカ             123-1234    新潟県 

すると、同一人物のデータが何度も手入力されていて、それぞれの行で情報量がバラバラです。

単純に重複と扱って1行目以降を削除するわけにいきません。


そこで、同一判定キーを基に、空欄の部分は他の行にあるデータをコピーして1行にまとめたいです。
どう処理すれば可能でしょうか。

まとめたい情報列はH列~AD列まであります。
約3000行です。


■同一判定キー ■名前  ■フリガナ ■電話       ■郵便番号   ■住所
田中123-1234  田中                  123-1234
田中123-1234  田中        0X0-1X34-1234  123-1234
田中123-1234  田中  タナカ             123-1234    新潟県  

 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓

■同一判別キー ■名前  ■フリガナ ■電話       ■郵便番号   ■住所
田中123-1234  田中  タナカ   0X0-1X34-1234  123-1234    新潟県


宜しくお願いします。

質問者からの補足コメント

  • >「郵便番号」だけは“抜け”がない、ということですか?

    いえ、最も抜けが少ない部分ではありますが抜けは多少あります。

    繋げた理由は、フルネームだけでソートを行うと同姓同名がいた場合に混ざってしまうからです。

    名前+郵便番号で処理し、それでも手動で対応するのは大変な件数が残った場合は、

    続いて
    名前+電話番号という組み合わせで処理する。

    という2段階で処理すれば、同姓同名を回避しつつ処理できると考えています。

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/07/06 13:10
教えて!goo グレード

A 回答 (3件)

こんばんは!



VBAになりますが、一例です。
↓の画像のように元データはSheet1にあり、Sheet2に表示するようにしてみました。
(質問の配置とは異なると思いますが、「同一判定キー」の列は不要です。
尚、Sheet3を作業用のSheetとして使用していますので、
Sheet3はまっさらな状態にしておいてください。

Alt+F11キー → メニュー → 挿入 → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → Excel画面に戻り(VBE画面を閉じて)マクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)

Sub Sample1() 'この行から//
Dim i As Long, lastRow1 As Long, lastRow3 As Long
Dim wS2 As Worksheet, wS3 As Worksheet
Set wS2 = Worksheets("Sheet2")
Set wS3 = Worksheets("Sheet3")
Application.ScreenUpdating = False
With Worksheets("Sheet1")
lastRow1 = .Cells(Rows.Count, "A").End(xlUp).Row
.Range("A:A").AdvancedFilter Action:=xlFilterCopy, copytorange:=wS2.Range("A1"), unique:=True
For i = 2 To wS2.Cells(Rows.Count, "A").End(xlUp).Row
wS3.Cells.ClearContents
.Range("A1").AutoFilter field:=1, Criteria1:=wS2.Cells(i, "A")
Range(.Cells(2, "A"), .Cells(lastRow1, "E")).SpecialCells(xlCellTypeVisible).Copy wS3.Range("A1")
lastRow3 = wS3.Cells(Rows.Count, "A").End(xlUp).Row
Range(wS3.Cells(1, "A"), wS3.Cells(lastRow3, "E")).SpecialCells(xlCellTypeBlanks).Delete shift:=xlUp
Range(wS3.Cells(1, "B"), wS3.Cells(1, "E")).Copy wS2.Cells(i, "B")
Next i
.AutoFilterMode = False
wS3.Cells.Clear
wS2.Columns.AutoFit
End With
Application.ScreenUpdating = True
wS2.Activate
End Sub 'この行まで//

こんな感じではどうでしょうか?m(_ _)m
「エクセルで複数行に散らばった同一人物の情」の回答画像3
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

"E"となっている部分を"AD"に変更し
同一判定キーの列をA列に移動して実行したところ

希望通りの結果が得られました。

非常に参考になりました。

ありがとうございます!!

お礼日時:2015/07/10 15:28

数千人分のデータなので、何処まで役に立つか疑問だけど、


↓↓↓↓↓↓↓↓↓↓↓↓↓↓
の上にある一人分のデータである添付図上段を最下段のようにするのは簡単にできます。
[ジャンプ]コマンドで“空白セル”だけを選択した後、[削除]コマンドで“上方向にシフト”を実行するのです。
ただし、オートフィルタで抽出したばかりのデータではできないのが残念ではあります。
「エクセルで複数行に散らばった同一人物の情」の回答画像2
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

この方法は存じておりますが、1人だいたい3行前後ある状態ですので、
1000人分と仮定した場合、H列~AD列の23列を編集してゆくとなると
少なく見積もっても1000人×23列分で2万3千回のセル選択と削除操作をする事になる為、
現実的ではないですね。

また、下に続く他の人の情報も一緒に上方向へシフトしてしまうのではないでしょうか。

お礼日時:2015/07/06 22:50

》 名前と郵便番号を繋げて同一判別キー(G列)を作り、ソートをかけました


ということは、「約3000行」のレコードで、「名前」以外には「郵便番号」だけは“抜け”がない、ということですか?
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

教えて!goo グレード

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング