• ベストアンサー

確定したカタカナをアルファベットに変換できますか

Excelにカタカナで名前を登録しているのですが、カタカナで入力したものをアルファベットに変換することはできるのでしょうか。 置換だと特定の文字列しかできないですよね。 再変換にするといいんでしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

ユーザー定義関数を作ってみました。 =changeKatakana2Romaji(A1)とか =changeKatakana2Romaji("ヒッチコック")として使います。 すぐできたんですが、投稿すると、半角が全角になったり、必要なスペースが無くなるので影響が出ないようにしたつもりです。 標準モジュールに貼り付けます。 Public Const Roma_Boin = "AIUEO" Public Const Kata_S1 = "AアイウエオKカキクケコSサシスセソTタチツテトNナニヌネノ" Public Const Kata_S2 = "HハヒフヘホMマミムメモYヤイユエヨRラリルレロWワイウエヲ" Public Const Kata_S3 = "GガギグゲゴZザジズゼゾDダヂヅデドBバビブベボPパピプペポ" Public Function changeKatakana2Romaji(srcMoji As String)   Dim kataMoji As String 'カタカナ文字   Dim RomaMoji As String 'ローマ字   Dim L As Long '文字カウンタ   Dim elm As String '1文字   Dim Pot As Integer '変換テーブルでの位置   Dim wkBoin, wkSiin As String '母音と子音   Dim chgTBL As String '変換テーブル     chgTBL = Kata_S1 & Kata_S2 & Kata_S3   kataMoji = StrConv(srcMoji, vbKatakana + vbWide) '全角カタカナにして『゛゜』を処理   Application.Volatile   For L = 1 To Len(kataMoji) 'カタカナ全角文字の母音と子音を作る     elm = Mid(kataMoji, L, 1): Pot = InStr(chgTBL, elm)     If 0 < Pot And Pot <= 6 Then       wkBoin = Mid(Roma_Boin, Pot - 1, 1): wkSiin = "": elm = wkBoin & wkSiin     ElseIf Pot > 6 Then       wkBoin = Mid(chgTBL, Int((Pot - 1) / 6) * 6 + 1, 1)       wkSiin = Mid(Roma_Boin, (Pot - 1) Mod 6, 1): elm = wkBoin & wkSiin     Else       If elm = "ン" Then elm = "N" '『ン』は特別処理     End If     RomaMoji = RomaMoji & elm   Next   RomaMoji = KomojiOkikae(RomaMoji, "ャ", "YA") '小文字『ャ』の処理   RomaMoji = KomojiOkikae(RomaMoji, "ュ", "YU") '小文字『ュ』の処理   RomaMoji = KomojiOkikae(RomaMoji, "ョ", "YO") '小文字『ョ』の処理   For L = 2 To Len(RomaMoji) '小文字『ッ』の処理     If Mid(RomaMoji, L - 1, 1) = "ッ" Then       Mid(RomaMoji, L - 1, 1) = Mid(RomaMoji, L, 1)     End If   Next   changeKatakana2Romaji = StrConv(RomaMoji, vbNarrow) End Function 'カタカナ小文字の処理(ャュョ) Public Function KomojiOkikae(Moji As String, komoji As String, Okikae As String)   Dim kPot As Integer   If InStr(Moji, komoji) > 0 Then     Mid(Moji, InStr(Moji, komoji) - 1, 2) = Okikae   End If   KomojiOkikae = Moji End Function

noname#1625
質問者

お礼

こんなに詳しい回答をいただけるとは思いませんでした。 ありがとうございます! 早速作ってみます。本当にありがとうございました。

関連するQ&A

専門家に質問してみよう