- 締切済み
エクセルで、半角カタカナの住所録を全てローマ字に変換したいと思います。
エクセルで、半角カタカナの住所録を全てローマ字に変換したいと思います。 かなり大量に量があるので、一度に簡単に便利に出来たらよいと思い、こちらでも 似たケースを検索したところ、下記のユーザー定義登録が出てきました。 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 ですが、どうしてもうまく実行されません。「プロシージャの外では無効です」という メッセージが出ました。他の方法でも、構いません。 当方、VBA初心者でして、お手数ですが、「ツールバー→マクロ」というレベルから、 教えていただけると助かります。 どうぞ宜しくお願い致します。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- cerastium2
- ベストアンサー率42% (8/19)
私も実行してみましたが、問題なく作動するようです。 余計なコードが入力されているようなので 標準モジュールを空にしてもう一度張り付けてみてください。 (他にマクロを書いていない場合ですが) A1セルにカタカナが入っていたとして、B1セルに =changeKatakana2Romaji(A1) と入れてOKでした。