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

Excelで英数字をカナに変換する方法は?

  • すぐに回答を!
  • 質問No.178906
  • 閲覧数2893
  • ありがとう数7
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 82% (28/34)

ほかのアプリケーションからデータをインポートし、それをあいうえお順に並べ替えをしたいのですが、一部のデータがアルファベット表示になり正しく並べ替えができません。Excelのデータをアルファベット表示からカナ表記に変える方法(関数?)をおしえてください!
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.4
レベル13

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

ローマ字→かな(カナ、半角カナ)変換を作ってみました。
変換部分より変換定義部分が長く、かなり長くなりました。質問内容から逸脱して、ローマ字文書を変換するVBAになった嫌いがあります。変換定義をシートに登録すれば、20行くらいで書けるようです。

 =fncRomaji_To_Kana(A1,1) のようにして使います。A1はローマ字が入力されているセル、2つ目の引数は、

 1:ローマ字部分を半角カタカナで表示
 2:ローマ字部分を全角カタカナで表示
 3:ローマ字部分を全角ひらがなで表示

IME2000の入力(Helpのローマ字とかな対応一覧)とほぼ一致した変換をします。(laなどを除外)
IMEにない入力も追加できます。(HWA=ふぁ など)
長いローマ字文書で試しましたが、長音(例:RO-MAとROMA)はしょうがないですかね(Excel2000)

下記を標準モジュールを挿入して貼り付けます。時間がたちましたが参考に回答します。何かの役に立つかもしれません。

Dim Ro(300) As String, Ka(300) As String 'ローマ字、カナ
Dim cot As Integer            '変換する個数カウンタ
Dim elm As String             '変換定義文字列
Dim rm As String, kn As String      'ローマ字の先頭、カナの先頭
Dim ps As Integer             '変換しない箇所
Dim L As Integer, m As Integer      'カウンタ

Public Function fncRomaji_To_Kana(myRange As Range, chgMode As Integer)
  Dim moji As String   'セルの文字
  Dim pot As Integer   '検索した位置
  Dim okikae As String  '置き換えるカナ文字
  Dim okikaeTU As String '置き換えるカナ文字の『っ』

  cot = 0
  Call HenkanSet     '変換定義を作成

  moji = myRange
  For L = 1 To cot    '照合開始してカナに置き換え
    pot = Kensaku(moji)
    While pot > 0
      Select Case chgMode
        Case 1: okikae = StrConv(Ka(L), vbKatakana + vbNarrow): okikaeTU = Chr(175)
        Case 2: okikae = StrConv(Ka(L), vbKatakana + vbWide): okikaeTU = "ッ"
        Case 3: okikae = StrConv(Ka(L), vbHiragana + vbWide): okikaeTU = "っ"
      End Select
      moji = Left(moji, pot - 1) & okikae & _
          Right(moji, Len(moji) - (pot + Len(Ro(L)) - 1))
      If pot > 1 Then
        Select Case Mid(moji, pot - 1, 1)
          Case "N", "n", "N", "n"
          Case Else  'N以外で前の文字が同一子音なら『っ』にする
            If StrConv(Mid(moji, pot - 1, 1), _
              vbUpperCase + vbNarrow) = Left(Ro(L), 1) Then
              Mid(moji, pot - 1, 1) = okikaeTU  '『っ』を調べる
            End If
        End Select
      End If

      pot = Kensaku(moji)  '次の検索
    Wend
  Next
  fncRomaji_To_Kana = moji
End Function

Public Function Kensaku(mj As String)  'テーブルのローマ字があるか調べる
  Dim p As Integer  '検索文字位置(ローマ字が大小文字、半角、かな、カナ、先頭大文字の組み合わせ)
  p = InStr(mj, Ro(L))
  If p = 0 Then p = InStr(mj, StrConv(Ro(L), vbLowerCase))
  If p = 0 Then p = InStr(mj, StrConv(Ro(L), vbWide))
  If p = 0 Then p = InStr(mj, StrConv(Ro(L), vbLowerCase + vbWide))
  If p = 0 Then p = InStr(mj, StrConv(Ro(L), vbProperCase))
  If p = 0 Then p = InStr(mj, StrConv(Ro(L), vbLowerCase + vbProperCase))
  If p = 0 Then p = InStr(mj, StrConv(Ro(L), vbWide + vbProperCase))
  If p = 0 Then p = InStr(mj, StrConv(Ro(L), vbLowerCase + vbWide + vbProperCase))
  Kensaku = p
End Function

Public Sub HenkanSet() 'ローマ字とかなの対比テーブルを作る
  Dim sDef As String  '変換定義用文字列
  sDef = "きKY0しSY0しSH2ちTY0ちCY0にNY0ひHY0ふFY0みMY0りRY0"
  sDef = sDef & "ぎGY0じZY0じJY0ぢDY0びBY0ぴPY0てTH0ちCH2でDH0じJ_2"
    Call MakeTable1(sDef, "ゃぃゅぇょ")
  sDef = "うWH3くWH0すSW0とTW0ふFW0ぐGW0どDW0つTS3ふHW0ふF_3"
    Call MakeTable1(sDef, "ぁぃぅぇぉ")
  sDef = "KかきくけこSさしすせそTたちつてとNなにぬねのHはひふへほ"
  sDef = sDef & "MまみむめもYやいゆえよRらりるれろWわいうえをGがぎぐげご"
  sDef = sDef & "ZざじずぜぞDだぢづでどBばびぶべぼPぱぴぷぺぽ_あいうえお"
    Call MakeTable2(sDef)
  cot = cot + 1: Ka(cot) = "ん": Ro(cot) = "NN"
  cot = cot + 1: Ka(cot) = "ん": Ro(cot) = "N"
End Sub

  '『きゃ』や『くぁ』などの対比テーブルを作る。定義は4文字単位
  Public Sub MakeTable1(iDef As String, Sokuon As String)
    For L = 1 To Len(iDef) Step 4
      elm = Mid(iDef, L, 4)
      rm = Mid(elm, 2, 2): If Right(rm, 1) = "_" Then rm = Left(rm, 1)
      kn = Left(elm, 1): ps = Val(Right(elm, 1))
      For m = 1 To 5  'あ段からお段まで
        cot = cot + 1: Ro(cot) = rm & Mid("AIUEO", m, 1)
        Ka(cot) = kn
        If m <> ps Then  'ゃぁなどを付ける
          Ka(cot) = Ka(cot) & Mid(Sokuon, m, 1)
        End If
      Next
    Next
  End Sub

  '『あ』や『が』などの対比テーブルを作る。定義は6文字単位
  Public Sub MakeTable2(iDef As String)
    For L = 1 To Len(iDef) Step 6
      elm = Mid(iDef, L, 6)
      rm = Left(elm, 1): If rm = "_" Then rm = ""
      For m = 1 To 5  'あ段からお段まで
        cot = cot + 1: Ro(cot) = rm & Mid("AIUEO", m, 1)
        Ka(cot) = Mid(elm, m + 1, 1)
      Next
    Next
  End Sub
お礼コメント
kyon81

お礼率 82% (28/34)

ありがとうございました。
大変お手数をおかけしました。

ちょっとがんばってみます!!
投稿日時 - 2001-12-18 08:48:53
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.1
レベル11

ベストアンサー率 26% (73/271)

アルファベット表示というのは、 ローマ字で入力されているということでしょうか? 少なくともExcelではそのような関数はなかったはずです。 「ほかのアプリケーション」の方で対応出来ないとしたら、 フリーソフトでテキスト変換ソフトがありますので テキスト形式で保存して試してみてはいかがでしょう。 ...続きを読む
アルファベット表示というのは、
ローマ字で入力されているということでしょうか?
少なくともExcelではそのような関数はなかったはずです。

「ほかのアプリケーション」の方で対応出来ないとしたら、
フリーソフトでテキスト変換ソフトがありますので
テキスト形式で保存して試してみてはいかがでしょう。
補足コメント
kyon81

お礼率 82% (28/34)

ありがとうございます。
住所録のデータをエクセルにインポートしたのですが、一部の読み仮名のデータがローマ字で表記されてしまったのです。他のデータともあわせて使いたいため、50音で並べ替えをしようと思ったときに、アルファベット順で並ぶものとあいうえお順で並ぶものとで分かれてしまいます。
全てのデータを50音で並べ変えたいため、ローマ字を仮名に変えたいとおもったのです。
説明が上手じゃなくてすみません!
投稿日時 - 2001-12-03 20:55:33
お礼コメント
kyon81

お礼率 82% (28/34)

ありがとうございました。

URLとっても参考になりました!
投稿日時 - 2001-12-18 08:52:41

  • 回答No.2
レベル13

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

>Excelのデータをアルファベット表示からカナ表記に変える方法 質問の意味が良くわからないんですが、  1.Aa→エー、Bb→ビー・・・、1→イチ・・・100→ヒャク こういうことでしょうか    ソートするとR(アール)などは最初にきてしまいますが・・・  2.ローマ字をカナに変える?数字は?    例)ROMU→ロム。  3.英単語をカナ(いわゆる日本語読み?)に変える? ...続きを読む
>Excelのデータをアルファベット表示からカナ表記に変える方法

質問の意味が良くわからないんですが、

 1.Aa→エー、Bb→ビー・・・、1→イチ・・・100→ヒャク こういうことでしょうか
   ソートするとR(アール)などは最初にきてしまいますが・・・

 2.ローマ字をカナに変える?数字は?
   例)ROMU→ロム。

 3.英単語をカナ(いわゆる日本語読み?)に変える?数字は?
   例)ROM→ロム

いずれにしても、関数で単純にはできないでしょう。
1なら置き換えでもできそうですが。(何か違ってそうですね)

もう少し質問の詳しい内容と、どんなデータかが判明すれば何か方法があるかもしれません。(使用されているExcelのバージョンも)

また、インポートしたデータらしいので、振り仮名情報が無いはずなのでエクセルで振り仮名を設定(Excel2000 VBA)して、振り仮名と元の文字でソートすれば違った結果になるかもしれません。
補足コメント
kyon81

お礼率 82% (28/34)

ありがとうございます。
2番です!
やっぱり難しいですかね。
投稿日時 - 2001-12-03 21:00:41
お礼コメント
kyon81

お礼率 82% (28/34)

ありがとうございました!

質問の内容が的を得なくてすみませんでした。
がんばってみます!
投稿日時 - 2001-12-18 08:51:47
  • 回答No.3
レベル12

ベストアンサー率 18% (175/970)

範囲を指定して 編集→置換でやるしかないと思います 私の場合 例えばB列にフリガナがある場合B列をシート2にコピーして、シート2で置換した後、シート1の元の場所に再コピーします(これは値のみにします) 「あ~ん」まで約40位ですが力業でやっちぃます。 ...続きを読む
範囲を指定して 編集→置換でやるしかないと思います

私の場合 例えばB列にフリガナがある場合B列をシート2にコピーして、シート2で置換した後、シート1の元の場所に再コピーします(これは値のみにします)

「あ~ん」まで約40位ですが力業でやっちぃます。
お礼コメント
kyon81

お礼率 82% (28/34)

ありがとうございました。
力技も必要かも・・・

お手数をおかけしました。
投稿日時 - 2001-12-18 08:49:58
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

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

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

特集


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

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ