- 締切済み
excel2016でマクロを使用して住所並び替え方
excel2016でマクロを使用して住所並び替えしたいです やりたいことは以下になります 以下のようにバラバラの住所録を町名ごとに 出来れば50音順で、ふりがなをふったりセルに何か入力しなければ出来ない場合は町名毎に並べ替え、町名以降の番地順のみで並べ替えしたいです 東京都杉並区阿佐ヶ谷北1-1-1 東京都杉並区阿佐ヶ谷北1-1-2 東京都杉並区阿佐ヶ谷北1-1-3 東京都杉並区井草1-20-1 東京都杉並区井草1-25-4 東京都台東区谷中1-2-1 東京都台東区谷中1-28-3 のように順番ごとに並べ替えたいです 例; 東京都杉並区井草4-22 東京都杉並区阿佐谷北6-12-7 東京都台東区池之端1-3-45 東京都台東区池之端1-4-22 東京都杉並区阿佐谷北6-12-10 東京都台東区谷中3-4-12 東京都台東区谷中3-4-5 東京都杉並区阿佐谷北6-12-5 東京都杉並区今川1-19-21 東京都台東区浅草1-12-4 東京都杉並区今川1-13-16 東京都中央区入船1-1-17 東京都中央区勝どき5-12-9 東京都中央区入船1-4-3 東京都台東区谷中3-4-8 東京都杉並区今川1-13-6 東京都杉並区今川1-13-4 東京都中央区勝どき5-3-10 東京都台東区池之端1-4-21 東京都中央区入船3-5-8 よろしくお願い致します
- みんなの回答 (9)
- 専門家の回答
みんなの回答
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
【お詫び】番地を求める関数は、本当は次のよう。 Public Function FindChar(ByVal strText As String, ByVal strCharList As String) As Integer Dim I As Integer Dim L As Integer Dim P As Integer Dim C As String L = Len(strText & "") For I = 1 To L C = Mid(strText, I, 1) If InStr(1, strCharList, C) Then P = I Exit For End If Next I FindChar = P End Function まあ、エクセルで可能なようだから無用の長物ですが、一応、訂正しておきます。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
【補足】番地の始まる位置を取得する関数。 Public Function CharFind(ByVal strText As String, ByVal strCharList As String) As Integer Dim I As Integer Dim J As Integer Dim L As Integer Dim N As Integer Dim P As Integer Dim C() As String C() = Split(strCharList & ",", ",") N = UBound(C()) L = Len(strText & "2") For I = 0 To N For J = 1 To L If Mid(strText, J, 1) = Trim(C(I)) Then P = J Exit For End If Next J If P > 0 Then Exit For End If Next I CharFind = P End Function これで、先の要領で並び替えられる筈です。
- chayamati
- ベストアンサー率41% (260/624)
今晩は、横から失礼します。 >excel2016でマクロを使用して住所並び替えしたいです マクロは必要ありません >バラバラの住所録を町名ごと 町名ごとですか?町名順なら並び替えでよいのですが フィルタ機能は如何ですか 列名をアクティブにしてからデータリボンのフィルタをクリックします。 項目名の右側の▽で、全ての住所名に(チェックボックス チェック)がついています。 すべて選択の(チェックボックス チェック)を外すと他の(チェックボックス チェック)も外れます。 改めて必要な住所に(チェックボックス チェック)を入れます添付図 分類ツールもこのデータリボン内にありますね >出来れば50音順で 住所はどの様にして登録しましたか ・一つ一つかな漢変換入力なら入力した漢字についていますので 50順になります ・郵便番号より、変換するとこれがふりがなになります ・他のファイルからのコピペならJISコード順なのでオン読み順に >ふりがなをふったりセルに何か入力しなければ出来ない場合は町名毎に並べ替え、町名以降の番地順のみで並べ替えしたいです この必要は無いでしょう、あるとしたら郵便番号の追加でしょう
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
Q、町名+番地で昇順に! A、それは、出来ているも同然。 初回回答の2番目に番地が始まる位置を示す数字があります。この数字を手掛かりに住所を町名までと番地に分割しています。で、町名の末尾に10個のスペースを付加し、その後に町名をくっ付けます。後は、エクセルのメニュー昇順をクリックするだけ。が、先ほど、番地が始まる位置を求める関数を消しました。明日、それをもう一度書くのでお待ちください。まあ、それとも、番地が始まる位置を求める関数を自作するか?OKWaveで質問するか?どっちでも、いいです。なお、この補足に対する返信は無用ですよ。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
- imogasi
- ベストアンサー率27% (4737/17069)
総論的な話を書いてみます。 次の2つが問題になる。 (A)区切りの問題 下記(1)-(4)を分けた住所をデータを持っている場合は少ない。 ひと続きの文字列になっている場合が多い。(1)-(4)が、スペースででも区切られておればVBAで処理しやすいが。 (B)並べ替える基にするデータの存在 (B)は日本の慣行からして、フリガナのデータが必要なばあいがほとんど。 ーーー 住所の大まかな区分は、 (1)・都府県の文字部分 (2)・区の文字部分 (3)・町の文字部分 (4)・丁目番地の、文字数字か数字記号部分 (5)・マンション名などの部分 を、エクセルで言えば「列」ごとに、一旦分けないと、ソートがうまく行きません。 ーー (1)、(2)はエクセルの関数でも、行う方法は、WEBを調べればたくさん記事がでます。またVBAでも簡単に出来ます。 ただし文字でやると、例外はありますので考慮が必要。例 四日市市 町と丁目・番地部分をVBAで分けるのは、少しむつかしい。 ーー 分けることができれば、後は優先列を指定して並べるだけです。 また操作ででも、できるのでVBAにこだわる必要がないです。 ==== フリガナの問題もVBAで自動でやるのは、むつかしい。 地名は独特の読み方をするのが多いから。 ただ、GetPhonetic関数の利用があります。 少数例で、私の場合は下記ですが。 どこかからコピーした文字列(そのシートに直接打ち込んだデータでない場合)だとうまく行かないかも。 A列 B列(実行結果) 東京都 トウキョウト 神奈川 カナガワ 四谷 ヨツヤ 渋谷区 シブヤク 本郷 ホンゴウ 御茶ノ水 オチャノミズ 秋葉原 アキハバラ 西原 ニシハラ 雑司ヶ谷 ゾウシガヤ ーー B列は Sub Sample1() Dim x As String For i = 2 To 10 ’9行分の例 x = Cells(i, 1) Cells(i, "B") = Application.GetPhonetic(x) Next i End Sub で出したもの。2013の例。 質問者の使うエクセルの場合に、うまく行くかな。上手く行けば使えるでしょう。 ーー ただし下記のような記事があります。 http://officetanaka.net/excel/vba/tips/tips49.htm >注意:これ、最近はできなくなったようですね。Excelというか、MS-IMEの仕様変更かもしれませんね。 ーー 追記 OKWAVEの質問記事の例からコピーして、A列に貼り付けて、上記を実行すると 東京都杉並区今川 トウキョウトスギナミクイマガワ 東京都中央区勝どき トウキョウトチュウオウクカチドキ 東京都台東区池之端 トウキョウトタイトウクイケノハタ 東京都中央区入船 トウキョウトチュウオウクイリフネ になりました。ただし、都+区+町名等分離以前データです。 以上参考に。 === CSVデータにして、市販年賀状ソフト(住所録作成機能部分)などに読み込ませて目的を達せられないか。 VBAも自由自在ではないだろうから、自作ではなくて、フリーのソフトで、使えるものはないかを探す、などが本筋かとも思う。
補足
f_a_007さん、返信ありがとうございます 重複する町名は揃えたいです なので、 A1の直ぐ下に、A10、A14の町名+番地をA2、A3に並べ替えたいです