質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%

Q&A

1回答

6821閲覧

Excelマクロでヘボン式変換を作成する

takashiro7300

総合スコア12

0グッド

1クリップ

投稿2022/07/07 02:08

ExcelのA1セルにカタカナを入力し、
B1セルに「=KatakanaToRomaji(A1)」を入力しておき、
マクロでKatakanaToRomajiを作成しています。

B1セルには、A1セルに入力したカタカナをヘボン式ローマ字に変換した文字列が表示されて欲しいです。

そこでマクロのKatakanaToRomajiについて、今回お伺いしたいです。

■↓マクロ部分

Function KatakanaToRomaji(a As String) As String Dim x As Variant Dim y As Variant Dim Z As String Dim i As Integer ' ①文字変換 x = Array("ニャ", "ニュ", "ニョ", "ビャ", "ビュ", "ビョ", "ミャ", "ミュ", "ミョ", "ギャ", "ギュ", "ギョ", "ジャ", "ジュ", "ジョ", "リャ", "リュ", "リョ", "ヒャ", "ヒュ", "ヒョ", "ティ", "ディ", "ピャ", "ピュ", "ピョ", "キャ", "キュ", "キョ", "チャ", "チュ", "チョ", "シャ", "シュ", "ショ", "ティ", "ディ", "ア", "イ", "ウ", "エ", "オ", "カ", "キ", "ク", "ケ", "コ", "サ", "シ", "ス", "セ", "ソ", "タ", "チ", "ツ", "テ", "ト", "ナ", "ニ", "ヌ", "ネ", "ノ", "ハ", "ヒ", "フ", "ヘ", "ホ", "マ", "ミ", "ム", "メ", "モ", "ヤ", "ユ", "ヨ", "ラ", "リ", "ル", "レ", "ロ", "ワ", "ヲ", "ン", "ガ", "ギ", "グ", "ゲ", "ゴ", "ザ", "ジ", "ズ", "ゼ", "ゾ", "ダ", "ジ", "ヅ", "デ", "ド", "バ", "ビ", "ブ", "ベ", "ボ", "パ", "ピ", "プ", "ペ", "ポ", "ャ", "ュ", "ョ", "ァ", "ィ", "ェ", "ォ", "ヴ", "ヂ") y = Array("NYA", "NYU", "NYO", "BYA", "BYU", "BYO", "MYA", "MYU", "MYO", "GYA", "GYU", "GYO", "JA", "JU", "JO", "RYA", "RYU", "RYO", "HYA", "HYU", "HYO", "THI", "DHI", "PYA", "PYU", "PYO", "KYA", "KYU", "KYO", "CHA", "CHU", "CHO", "SHA", "SHU", "SHO", "THI", "DHI", "A", "I", "U", "E", "O", "KA", "KI", "KU", "KE", "KO", "SA", "SHI", "SU", "SE", "SO", "TA", "CHI", "TSU", "TE", "TO", "NA", "NI", "NU", "NE", "NO", "HA", "HI", "FU", "HE", "HO", "MA", "MI", "MU", "ME", "MO", "YA", "YU", "YO", "RA", "RI", "RU", "RE", "RO", "WA", "WO", "N", "GA", "GI", "GU", "GE", "GO", "ZA", "JI", "ZU", "ZE", "ZO", "DA", "JI", "ZU", "DE", "DO", "BA", "BI", "BU", "BE", "BO", "PA", "PI", "PU", "PE", "PO", "YA", "YU", "YO", "A", "I", "E", "O", "V", "JI") Z = a For i = 0 To UBound(x) Z = Replace(Z, x(i), y(i)) Next i ' ②ヘボン式変換 Z = Replace(Z, "ッP", "PP") Z = Replace(Z, "ッS", "SS") Z = Replace(Z, "ッT", "TT") Z = Replace(Z, "ッK", "KK") Z = Replace(Z, "ッC", "TC") Z = Replace(Z, "ッH", "HH") Z = Replace(Z, "YUN", "UN") Z = Replace(Z, "ー", "-") Z = Replace(Z, "NB", "MB") Z = Replace(Z, "NM", "MM") Z = Replace(Z, "NP", "MP") Z = Replace(Z, "OO", "O") Z = Replace(Z, "OU", "O") Z = Replace(Z, "UU", "U") KatakanaToRomaji = Z End Function

■↑ここまで

①文字変換で、まずはカタカナをローマ字に変換し、

②ヘボン式変換で、ヘボン式ならではの変換をしています。

②により、
例えば「伊藤」の場合は、「イトウ」→「ito」になるようにしています。

ですが、「井上」の場合、「イノウエ」が、
「inoue」になって欲しいのですが、
②により、「inoe」になってしまいます。

②の変換処理が、こちらを立てればあちらが立たずという事になってしまいます。

こういった場合、どちらも立たせる方法はありますでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

「OU」が文字列の最後なら「O」に変換、途中なら変換しないというロジックにすれば、伊藤と井上は対応できます。

vba

1' Z = Replace(Z, "OO", "O") 2' Z = Replace(Z, "OU", "O") 3 4 If Z Like "*O[OU]" Then Z = Left(Z, Len(Z) - 1)

ただ、「井戸宇」(イトウ)さん(とか「伊能江」(イノウエ)さんとかいう名前があったらどうしようもないです。(勝手に考えた名前なので実際にいるかどうかは知りませんが、このようなパターンの名前がある可能性はあると思います。)

投稿2022/07/07 04:48

編集2022/07/07 04:49
hatena19

総合スコア34347

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jinoji

2022/07/07 07:51

高知はKOCHI, 瀬戸内はSETOUCHI みたいなこともあるので、ルール化は難しそうですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問