- ベストアンサー
エクセルで2-3-15を二丁目三の十五に…
エクセルで住所録を作った際に「2-3-15」と入力されています。 それをワードのはがき宛名印刷で印字すると「2-3-15」が横になってしまいます。 そこでエクセルで「2-3-15」を「二丁目三の十五」などのように漢数字に変換したいのですが、簡単に変換する方法ありますか? もしくはエクセルは「2-3-15」のままで、ワードのはがき印刷の際に うまく印刷されるような方法がありましたら、教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>そこで考えたのですが、「2-3-15」を「二丁目三の十五」ではなく「二の三の十五」でいいかなと… fn住所変換の後ろにある 『'数字を分解して漢数字に変換する』の2行下、 elm(1) = fn漢数字1(Mid(wk, Bar1 - Len1, Len1)) & "丁目" ↓ elm(1) = fn漢数字1(Mid(wk, Bar1 - Len1, Len1)) & "の" のように、『丁目』を『の』に変えればいいでしょう。 イレギュラーなデータは、ユーザー定義関数で変換し、コピーして『形式を選択して貼り付け→値』で修正可能です。
その他の回答 (3)
- nishi6
- ベストアンサー率67% (869/1280)
住所のうち、「2-3-15」の位置が特定しにくいので簡単には変換できないような気がします。 住所表記が「2-3-15」の書き方のみかどうかも気になります。また、『15→十五』の『十』部分が面倒な感じです。 ということで、ユーザー定義関数を作ってみました。 A1に変換前の住所があるとして、別セルで =fn住所変換(A1) とします。 下に変換例を書いておきます。(変換前の『マンション』は半角文字です) 大東京区大埼玉町123 大マンション601 → 大東京区大埼玉町一二三 大マンション六〇一 大東京区大埼玉町4-10 大マンション601 → 大東京区大埼玉町四丁目十 大マンション六〇一 大東京区大埼玉町10-123 大マンション601 → 大東京区大埼玉町十丁目一二三 大マンション六〇一 大東京区大埼玉町2-4-1 大マンション601 → 大東京区大埼玉町二丁目四の一 大マンション六〇一 大東京区大埼玉町2-4-10 大マンション601 → 大東京区大埼玉町二丁目四の十 大マンション六〇一 大東京区大埼玉町2-4-24 大マンション601 → 大東京区大埼玉町二丁目四の二十四 大マンション六〇一 大東京区大埼玉町2-10-20 大マンション601 → 大東京区大埼玉町二丁目十の二十 大マンション六〇一 標準モジュールを挿入し、そこに貼り付けます。 ↓ Function fn住所変換(ADR As String) Dim wk As String 'ワーク変数 Dim Bar1 As Integer, Bar2 As Integer 'バーの位置 Dim Len1 As Integer, Len3 As Integer '最初と最後の数値の長さ Dim elm(4) As String '住所を分解 Dim L As Integer 'カウンタ 'バーの位置を決める wk = ADR & " " Bar1 = InStr(wk, "-") Bar2 = InStr(Bar1 + 1, wk, "-") 'バーがない場合 If Bar1 = 0 Then fn住所変換 = fn漢数字2(wk): Exit Function 'バーが1つの場合 If Bar2 = 0 Then Bar2 = Bar1 Len1 = 0 '最初の数値の長さ Do Until InStr("1234567890", Mid(wk, Bar1 - Len1 - 1, 1)) = 0 Len1 = Len1 + 1 Loop Len3 = 0 '最後の数値の長さ Do Until InStr("1234567890", Mid(wk, Bar2 + Len3 + 1, 1)) = 0 Len3 = Len3 + 1 Loop '数字を分解して漢数字に変換する elm(0) = fn漢数字2(Mid(wk, 1, Bar1 - Len1 - 1)) elm(1) = fn漢数字1(Mid(wk, Bar1 - Len1, Len1)) & "丁目" If Bar1 <> Bar2 Then elm(2) = fn漢数字1(Mid(wk, Bar1 + 1, Bar2 - 1 - Bar1)) & "の" End If elm(3) = fn漢数字1(Mid(wk, Bar2 + 1, Len3)) elm(4) = Mid(wk, Bar2 + Len3 + 1) elm(4) = fn漢数字2(Left(elm(4), Len(elm(4)) - 1)) '変換結果をつなぐ fn住所変換 = StrConv(elm(0) & elm(1) & elm(2) & elm(3) & elm(4), vbWide) End Function '数字を漢数字にする関数1(数字が1、2桁) Function fn漢数字1(num As String) Dim ksj As String ksj = Application.Text(num, "[DBNUM1]#") Select Case Val(num) Case Is <= 9 Case Is <= 19 ksj = "十" & Right(ksj, 1) Case Is <= 99 ksj = Left(ksj, 1) & "十" & Right(ksj, 1) End Select ksj = Application.Substitute(ksj, "十〇", "十") fn漢数字1 = ksj End Function '数字を漢数字にする関数2(数字が3桁~) Function fn漢数字2(num As String) Dim k As Integer Dim Okikae As Integer For k = 1 To Len(num) Okikae = InStr("1234567890", Mid(num, k, 1)) If Okikae > 0 Then Mid(num, k, 1) = Mid("一二三四五六七八九〇", Okikae, 1) End If Next fn漢数字2 = StrConv(num, vbWide) End Function
補足
ありがとうございます。できましたよ!上の式が何を意味するのかチンプンカンプンなんですが、とりあえずそのまま貼り付けてみました。上手く変換できました。 でも確かにおっしゃるとおりで、「2-3-15」という書き方に統一されているわけではなく、例えば何丁目という表記がでてこない住所(自分の所がそうなのですが)「123-5」などというところも「一二三丁目の五」となってしまいました。 また入力の際に「1丁目2-15」などと入力してしまったものもあり、それは「1丁目二丁目十五」となりました。 これは私の説明不足でした。すみません。 そこで考えたのですが、「2-3-15」を「二丁目三の十五」ではなく「二の三の十五」でいいかなと… 既に「1丁目2-5」などと入力してまったものは、とりあえず無視してかまいません。 もし、お時間がありましたら、「二の三の十五」に表示できるように再度ご教示願いますでしょうか。よろしくお願いします。
- yukinojyou7
- ベストアンサー率28% (87/304)
kyonkoさん、こんばんは 縦書きにする時に見やすくということであれば 「-」を「の」に置換(編集→置換)して 2 の 3 の 15 という感じではダメなんでしょうか? これなら縦でも横でも大丈夫だと思います
補足
回答ありがとうございます。お答えのように表示されればいいのですが、私がためしたところ全角の数字を使いますと 2 の 3 の 1 5 と表示されます。「1」と「5」が横並びに表示される方法がわかりません。教えてください。
- shishishishi
- ベストアンサー率39% (362/921)
2-3-15が半角のため、ワードでは縦書きにすると横になるのだと思います。 全角文字2-3-15に変えてみてください。 わたしはエクセルで全角に変換する関数を知らないので、いったん住所データをワードにはって書式→文字種の変換でやってみたらできました。
補足
回答ありがとうございます。全角に代えると確かに数字は横にはなりませんね。でも全角の「-」は横棒になってしまい……これは半角の「-」のままの方が縦棒で表示されるようです。全角の数字ですが、一桁の数字の場合はOKなのですが、「15」のように二桁以上になりますと数字が1つずつ縦になってしまいます。ちょっと、そこらへんが気に入らないかなぁ。他の方法で解決できたらと思います。
お礼
何度もお力になっていただきありがとうございました。お陰さまで漢数字を使った住所録に変換できました。