- 締切済み
2つのデータの統合方法を教えてください。
以下の2つのcsvデータを統合したいと思います。 1.氏名,メールアドレス 2.氏名,住所,電話番号 上記のデータを「氏名」で紐付けして統合したいと思っています。 1.A,B ⇒ A,B,C,D 2.A,C,D 具体的に確認したいことは、以下の2点です。 1.統合方法を知りたい。 2.1の方法で統合した場合で、氏名の共通がなかった場合は、 空欄で統合できる方法を知りたい。 以上、よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
エクセルでする場合 氏名,メールアドレス をSheet2 のA列、B列に配置 氏名,住所,電話番号 をSheet3 のA列、B列、C列に配置 そして、「Sheet1」を「統合」の名前に変えます。 統合方法(処理内容)は 1.Sheet2、Sheet3のA列の名前を統合シートのA列に持ってきます。 2.統合シートのA列の重複した名前を1つにします、 3.統合シートのA列の名前から各シートの値を収得します。 -------------------------------------------------------- Sub 統合macro() Dim lastrow, lastrow1, lastrow2, i, t, m As Long Dim temp As String Dim ws1, ws2 As Worksheet Set ws1 = Worksheets("sheet2") Set ws2 = Worksheets("sheet3") Worksheets("統合").Select '----統合シートに各シートのA列の値収得------ 'sheet2A列の最終行収得 lastrow1 = ws1.Range("A65536").End(xlUp).Row For i = 1 To lastrow1 Cells(i, 1).Value = ws1.Cells(i, 1).Value Next m = lastrow1 'sheet3A列の最終行収得 lastrow2 = ws2.Range("A65536").End(xlUp).Row For i = 1 To lastrow2 Cells(m + i, 1).Value = ws2.Cells(i, 1).Value Next '-------統合シートのA列の重複削除----------- 'A列の最終行収得 lastrow = Range("A65536").End(xlUp).Row '最後の位置から重複行の削除処理 For i = lastrow To 2 Step -1 temp = Cells(i, 1).Value '目的のセル値がA列に2つ以上あるときセルの削除 If Application.WorksheetFunction.CountIf(Range("A1:A" & lastrow), temp) > 1 Then 'セルの行の削除 Cells(i, 1).EntireRow.Delete Shift:=xlUp End If Next i '-------統合シートA列を元にデータ収得-------- 'A列の最終行収得 lastrow = Range("A65536").End(xlUp).Row For i = 1 To lastrow For t = 1 To lastrow1 If Cells(i, 1).Value = ws1.Cells(t, 1).Value Then Cells(i, 2).Value = ws1.Cells(t, 2).Value End If Next Next For i = 1 To lastrow For t = 1 To lastrow2 If Cells(i, 1).Value = ws2.Cells(t, 1).Value Then Cells(i, 3).Value = ws2.Cells(t, 2).Value Cells(i, 4).Value = ws2.Cells(t, 3).Value End If Next Next MsgBox "処理終了" End Sub -----------ここまで
- kigoshi
- ベストアンサー率46% (120/260)
一方的に、つまり1表にある氏名が2表に必ずある、またはその逆だったら vlookup関数を使うのが通常の方法と思いますが、どちらにも相手が存在しな い可能性がある場合はvlookupでやるのは難しい気がします。 if関数を階差で使う方法で考えてみました。 1表も2表も表題行が1行あると仮定します。 1)2表のB列に空列を挿入する。 2)2表のB2に =IF(A2=A3,B3,"") を入れ、下までコピー。 3)1表のC2に =IF(A2=A1,"▲","") を入れ、下までコピー。 4)1表の表題行を除いた部分(A~C列)をコピーし、2表の下へ貼り付け。 5)2表でA列をキーに昇順で並べ替え。 6)2表で[Ctrl]+[A]を押した後、[Ctrl]+[C]、[編集]→[形式を選択して貼り付け]→[値]にチェック→[Ok] 7)C列をキーに昇順で並べ替え。 8)▲が表示されている行を削除
- zap35
- ベストアンサー率44% (1383/3079)
2つのCSVファイルを同じブックの2枚のシートとして読み込みます。 読み込みにはEXCELを開いて「データ」→「外部データの取り込み」→「データの取り込み」を選択し、読み込むファイルを指定します。 この際に注意するのは「電話番号の列の書式を文字列にする」ことです。これを忘れると、電話番号の先頭0がなくなる可能性があります。 あとはVLOOKUP関数でAの名前に対するC,Dを検索して表示させるだけです。名前がヒットしない場合は =IF(ISNA(VLOOKUP(A1,Sheet2!A1:A1000,2,0)),"",VLOOKUP(A1,Sheet2!A1:A1000,2,0)) のようなエラー処理を行うと良いでしょう また片方のシートにしか存在しない名前を見つけるためにはCOUNTIF関数が使用できます。 =COUNTIF(Sheet2!A1:A1000,A1) だと、もう片方のシートに名前がなければ結果は0になりますから、フィルタで絞り込んで、その分だけもう片方のシートに貼り付ければ良いと思います。
- kokorone
- ベストアンサー率38% (417/1093)
私なら、秀丸を使います。 ※秀丸は、行単位・文字単位のコピーペーストに加え、ブロック単位の コピーペーストができる ファイル1とファイル2を秀丸で開きます。 ファイル1の全ての改行文字の前にカンマを入れます。(置換機能を 使えば、容易) ファイル2の全てをブロック単位コピーし、ファイル1の1行目の最終文字の後ろにペーストします。 この時、正常ならば、 An,Bn,An,Cn,Dn という行になります。 A3,B3,A2,C2,D2 A4,B4,A3,C3,D3 ならばA3,B3の2列をブロック削除し、A3の左に挿入します。 ,A2,C2,D2 A3,B3,A3,C3,D3 A4,B4 ,A2,C2,D2をA2, ,,C2,D2に変更します。 A3,B3,A4,C4,D4 A4,B4,A5,C5,D5 の場合は、A4,C4,D4の列をブロック削除&移動して修正します。 これを最後まで繰り返します。 Excel上に貼り付けて行ってもいいでしょうね。 プログラムの知識があるのであれば、マージ用のプログラムを作ってみてもいいかも。。