csvファイルで住所録のデータがあります。
個人別のデータで、氏名、郵便番号、住所の項目があり、
家族であれば住所は同じデータになっています。
これを宛名ソフトでよくあるように、氏名1、氏名2、氏名3、郵便番号、住所、
のようにしたいのですが、なにか良い方法はありますでしょうか。
私はエクセルは関数やマクロの簡単なものなら理解でき、
アクセスも少し触ったことはありますが、プログラムを作ることはできません。
エクセルの操作やアクセスでできる方法があれば教えてください。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
こんばんは!
VBAでの一例です。
CSVファイルをExcelで開き
↓の画像で元データが左側のSheetのようになっているとします。
マクロを実行すると右側のような表示になるようにしてみました。
画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に
↓のコードをコピー%ペースト → Excel画面に戻りマクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)
Sub Sample1() 'この行から
Dim i As Long, j As Long, endCol As Long
Range("A1").CurrentRegion.Sort key1:=Range("B1"), order1:=xlAscending, Header:=xlYes, _
key2:=Range("C1"), order1:=xlAscending, Header:=xlYes
For i = Cells(Rows.Count, "A").End(xlUp).Row To 2 Step -1
If Cells(i, "C") = Cells(i - 1, "C") Then
Cells(i - 1, "D") = Cells(i, "A")
endCol = Cells(i, Columns.Count).End(xlToLeft).Column
If endCol > 3 Then
Range(Cells(i, "D"), Cells(i, endCol)).Cut Cells(i - 1, Columns.Count).End(xlToLeft).Offset(, 1)
End If
Rows(i).Delete
End If
Next i
endCol = ActiveSheet.UsedRange.Columns.Count
If endCol > 3 Then
Range(Columns(2), Columns(endCol - 2)).Insert
End If
Range("A1") = "氏名1"
For j = 2 To endCol - 2
Cells(1, j) = "氏名" & j
Next j
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
Cells(i, endCol + 1).Resize(, endCol - 3).Cut Cells(i, "B")
Next i
Columns.AutoFit
End Sub 'この行まで
※ C列の住所が一致しているデータをおなじ行に表示するようにしています。
※ 一旦マクロを実行すると元に戻せませんので別Sheetでマクロを試してください。
こんな感じではどうでしょうか?m(_ _)m
No.2
- 回答日時:
シート1に元データとして
A列に名前、B列に郵便番号、C列に住所として
sub macro1()
dim w as worksheet
dim h as range
dim Target as range
dim lastRow as long
dim c as long, cc as long
’準備
set w = activesheet
lastrow = range("A65536").end(xlup).row
worksheets.add after:=worksheets(worksheets.count)
’本体
w.range("B:C").advancedfilter action:=xlfiltercopy, copytorange:=range("A1"), unique:=true
for each h in w.range("C1:C" & lastrow)
set target = range("B:B").find(what:=h.value, lookin:=xlvalues, lookat:=xlwhole)
cells(target.row, "IV").end(xltoleft).offset(0, 1).value = h.offset(0, -2).value
next
’飾り付け
c = cells.specialcells(xlcelltypelastcell).column
range(range("C1"), cells(1, c)).entirecolumn.cut
range("A:A").insert
for cc = 1 to c - 2
cells(1, cc) = "name" & cc
next cc
end sub
#業務のメインボディより(どーでもいい)飾りの方が手間がかかります
No.3
- 回答日時:
>これを宛名ソフトでよくあるように、氏名1、氏名2、氏名3、郵便番号、住所、のようにしたいのですが、なにか良い方法はありますでしょうか。
関数の組み合わせでも目的のように処理できます。
予め関数を組み込んだシートを用意して、テキストデータを読み込む方法が良いと思います。
A列~C列はテキストデータの読み込みテーブルとします。
D列に住所を単一化するためのインデックスに使います。
1行目は項目(フィールド)名となりますので2行目以降が実際のデータになります。
D2=IF(COUNTIF(C$2:C2,C2)=1,ROW(),"")
郵便番号(H列)と住所(I列)は同じ方法で抽出します。
H2=IFERROR(INDEX(B:B,SMALL($D:$D,ROWS($D$2:$D2))),"")
H2セルをI2セルへコピーし、下へ必要数だけコピーします。
氏名1(E列)~氏名3(G列)は同じ方法で抽出します。
E2=IFERROR(INDEX($A:$A,SMALL(IF($C:$C=$I2,ROW(C$1:C$100),""),COLUMNS($E1:E1))),"")
入れ子内のIF関数は配列値を返す必要があるので式を入力した後でCtrl+Shift+Enterで確定します。
E2セルを右へG2セルまでコピーし、3つのセルを同時に下へ必要数だけコピーすれば目的通りになります。
問題点は氏名1~氏名3が同姓のとき名前のみにしたくなると思います。
この問題については別途処理が必要になります。
動作テストにExcel 2013を使いましたので、Excel 2003以前のバージョンでは使えない関数も含まれています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの住所から郵便番号を表示するには 2 2022/09/01 16:18
- その他(Microsoft Office) EXCELの1行を1枚の用紙にそれぞれ印刷したい。 3 2022/10/10 11:35
- Excel(エクセル) 【Excel】住所に郵便番号を付記する方法 3 2022/05/07 17:15
- Excel(エクセル) 【エクセル】元データからの引用 5 2022/04/18 10:22
- 郵便・宅配 専用郵便番号なので住所なしで届くという場合 7 2022/04/14 14:08
- 年賀状作成・はがき作成 エクセルで作った住所録をワードの差し込み印刷ではがきに印刷したい 3 2022/09/26 15:47
- くじ・懸賞 【応募はがきのかきかたについて】 応募ハガキの書き方で、郵便ハガキの裏に ①郵便番号(自分の ②住所 3 2022/08/28 15:28
- Excel(エクセル) エクセルで沢山のレコードの最後に追記するには? 7 2023/04/10 13:27
- その他(プログラミング・Web制作) 入力フォームへ、データを自動的に入力するプログラム。どうやって作る? 4 2023/01/16 10:24
- Access(アクセス) 【至急・画像あり】建物or住所から電話番号を出す方法を教えてください 3 2023/02/17 11:58
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル初心者です 関数の入れ...
-
Microsoft1Officeの互換ソフト...
-
Excel ピボットテーブルで日付...
-
エクセル関数を教えてください
-
【マクロ】その時、その時で変...
-
【マクロ】読取専用のファイル...
-
LOOKUP関数を使えばいいのでし...
-
エクセル 白黒印刷で白線を印刷...
-
【関数】先頭だけにある、半角...
-
【関数】適切な文字数の数字を...
-
Excelのチェックボックスの使い...
-
エクセルでの作業計算方法について
-
Excelのpivotについて質問です
-
WPS OFFICEでの縦書きについて
-
時間によってファイル名が変わ...
-
エクセルのセルに同じ大きさの...
-
Aというブックの1というシート...
-
エクセルの順位別一覧表の自動...
-
西暦や和暦の表示をyyyymmdd表...
-
【マクロ】エクセルにかいてあ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
[関数得意な方]教えて下さい・...
-
Excelにてある膨大なデータを管...
-
[関数について]わかる方教えて...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセル関数に詳しい方教えて...
-
INDIRECTを使わず excelで複数...
-
[オートフィルタ]で抽出された...
-
エクセルの神よ、ご回答を! エ...
-
エクセル関数に詳しい方、教え...
-
各ページの1番上の表示について
-
Excelで写真のような表を作った...
-
エクセルで不等号記号(≠)が上に...
-
数学 Tan(θ)-1/Cos(θ)について...
-
Excel 2019 は、SPILL機能があ...
-
Excelで全角を半角にしたいので...
-
条件付き書式を教えてください
-
Excel フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報