OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

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

  • すぐに回答を!
  • 質問No.118541
  • 閲覧数3910
  • ありがとう数9
  • 気になる数0
  • 回答数1
  • コメント数0

Excelにカタカナで名前を登録しているのですが、カタカナで入力したものをアルファベットに変換することはできるのでしょうか。

置換だと特定の文字列しかできないですよね。
再変換にするといいんでしょうか。
よろしくお願いします。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1
レベル13

ベストアンサー率 68% (791/1163)

ユーザー定義関数を作ってみました。
=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

こんなに詳しい回答をいただけるとは思いませんでした。
ありがとうございます!
早速作ってみます。本当にありがとうございました。
投稿日時 - 2001-08-15 13:41:28
-PR-
-PR-
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ