http://yanok.net/dist/romaji-chimei-csv/
http://www.post.japanpost.jp/zipcode/dl/readme_ro.html
この辺から変換テーブル作ってvlookupで引っ張ってくる、というのはどうでしょうか。
ただ、「ヶ」「ケ」だとか政令指定都市の区名の扱いとか、あと長音や促音、撥音の扱いとかの問題はあるかもしれません。
あと、データ量がデータ量なので、自動再計算は切って、変換後に「値で貼り付け」で固定化した方が良いかもしれません。
▽2
●
a-kuma3 ●2000ポイント ベストアンサー |
住所の郵便番号(ローマ字・zip形式)のデータを使って、表引きでやってみました。
以下の手順でやってみてください。
Sub to_roman_by_list() source_col = 1 ' A列 : 市区町村 dest_col = 2 ' C列 : ローマ字 key_col = 3 ' C列 : 漢字 val_col = 6 ' F列 : ローマ字 ' ローマ字読みを引き当てる辞書を作成する Set ps = Sheets("KEN_ALL_ROME") Set roman_map = CreateObject("Scripting.Dictionary") last_row = ps.Cells(Rows.Count, key_col).End(xlUp).Row For r = 1 To last_row k = ps.Cells(r, key_col).Value i = InStr(k, " ") If i <> 0 Then k = Left(k, i - 1) End If v = ps.Cells(r, val_col).Value i = InStr(v, " ") i = InStr(i + 1, v, " ") If i <> 0 Then v = Left(v, i - 1) End If If Not roman_map.exists(k) Then roman_map.Add k, v Else vv = roman_map(k) If v <> vv Then roman_map(k) = "★★" End If End If Next ' 辞書を使ってローマ字読みを書き込む start_row = 2 last_row = Cells(Rows.Count, source_col).End(xlUp).Row Range(Cells(start_row, dest_col), Cells(last_row, dest_col)).Clear For r = start_row To last_row Roman = roman_map.Item(Cells(r, source_col).Value) If Roman = "" Then Roman = "★" End If Cells(r, dest_col).Value = Roman Next Set roman_map = Nothing End Sub
A列の市区町村名のローマ字読みを B列にセットします。
処理が終わってしまえば、郵便番号データは必要ないので KEN_ALL_ROME のシートは削除しても構いません。
前回の質問では「郡」の場合には、町村ではなく「郡」を採用しているので、ローマ字読みも「郡」を対象にしています。
引き当てができない場合には、手で修正しても構わない、ということなので、以下のケースでは探しやすいように、★をローマ字読みの列に入れるようにしました。
数年前の並程度のノートPC で、9000件ほどを 5秒で処理できました。
環境にもよりますが、50000件で十?数十秒のレベルで処理が完了すると思います。