• ベストアンサー

エクセルで数字を半角カタカナに変換

エクセルで数字を半角カタカナ 1→ア、2→イ、3→ウ、4→エ、5→オ 6→カ、7→キ、8→ク、9→ケ、0→コ、 ト → おなじ数字が続く時 に置き換えたいのですが、巧くいきません。 マクロが出来ないので、関数を組み合わせたりしましたが、全然ダメです。 例) 12500 → アイオ(最後にゼロが続く時はゼロを無視) 120500 → アイコオ 22800 → イトク 220800 → イトコク 800600 → クコトカ こんな感じですが、なかなか巧くいきません。お教え下さい。

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

  • ベストアンサー
  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.2

ユーザー定義関数を作りました。 Alt + F11で表示されるダイアログで「挿入」「標準モジュール」で追加した場所に 下記コードをコピーしてお試しください。 ※使用法は=NKANA(セル座標または数値) Function NKANA(NM As Long) As String Dim NMX As Integer, NMS, NMR As String '1次置き換え For I = 1 To Len(Format(NM, "0")) NMS = NMS & Mid("コアイウエオカキクケ", Mid(NM, I, 1) + 1, 1) Next I '00終了文字削除 NMX = 0 For I = Len(NMS) To 1 Step -1 If Mid(NMS, I, 1) = "コ" And NMX = 0 Then NMR = "" Else NMR = NMR & Mid(NMS, I, 1) NMX = 1 End If Next I '連続文字対応 NMR = NMR & " " For I = 1 To Len(NMR) - 1 If Mid(NMR, I, 1) = Mid(NMR, I + 1, 1) Then NMZ = "ト" & NMZ Else NMZ = Mid(NMR, I, 1) & NMZ End If Next I '文字セット NKANA = NMZ End Function

その他の回答 (5)

  • maron--5
  • ベストアンサー率36% (321/877)
回答No.6

◆ANo.5のmaron--5です ◆B1の式がまちっがっていましたので訂正します B1=C1&D1&E1&F1&G1&H1&I1

question11
質問者

お礼

いやあー、色々なやり方があるのですね。皆様のお陰で考えている事が解決出来ました。 maron--5さんの回答欄をお借りして皆様にお礼申し上げます。有難う御座いました。

  • maron--5
  • ベストアンサー率36% (321/877)
回答No.5

◆関数による方法です    A      B       C   D   E   F   1  12500   アイオ     ア  イ  オ 2  120500  アイコオ   ア  イ  コ  オ 3  22800   イトク     イ  ト  ク 4  220800  イトコク    イ  ト  コ  ク 5  800600  クコトカ    ク  コ  ト  カ C1=IF(A1="","",MID("コアイウエオカキクケ",MID($A1/IF(RIGHT($A1,2)="00",100,1),COLUMN(A1),1)+1,1)) ★下にコピー D1=IF(COLUMN(B1)>LEN($A1)-(RIGHT($A1,2)="00")*2,"",IF(MID($A1,COLUMN(A1),1)=MID($A1,COLUMN(B1),1),"ト",MID("コアイウエオカキクケ",MID($A1/IF(RIGHT($A1,2)="00",100,1),COLUMN(B1),1)+1,1))) ★右と下にコピー B1=D1&E1&F1&G1&H1&I1&J1 ★下にコピー

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんばんは。 =ConvertKataKana(A1) とします。 設定方法は、他の方が述べている通り、標準モジュールに設定します。 なんというか、どれほど、質問の日本語を忠実に再現するかっていうような内容ですね。(^^; >最後にゼロが続く時はゼロを無視 つまり、0 が続かないので、 120 -> アイコ になります。 なお、本来、配列の添え字は、1からすればよいと思う方もいるかもしれませんが、VBAでは、同じですが、別の言語ですと、1からはありませんので、あえて、0 からにしてあります。その分、ややこしいですね。 なお、当たり前ですが、サブルーチン関数にしても良いと思います。 '標準モジュール '--------------------------------------------------------------- Function ConvertKataKana(ByVal InFig As Variant) As String  Dim Figs As Variant  Dim Kanas As Variant  Dim buf As Variant  Dim strFig As String  Dim strFigBuf As String  Dim ar As Variant  Dim i As Integer  Dim j As Integer  Dim outBuf As String  Dim outChr As String  'この二つ(Figs,Kanas)の代入値には、コンマの間にはスペースを入れない  Figs = Split("1,2,3,4,5,6,7,8,9,0", ",")  Kanas = Split("ア,イ,ウ,エ,オ,カ,キ,ク,ケ,コ", ",")    If TypeName(InFig) = "Range" Then InFig = InFig.Cells(1).Value    If IsNumeric(InFig) And InFig <> Empty Then    buf = InFig   If buf Like "*00" Then    While Right$(buf, 1) = "0"     buf = Mid$(buf, 1, Len(buf) - 1)    Wend   End If  Else   Exit Function  End If  buf = CStr(buf)    For i = 1 To Len(buf)   strFig = Mid$(buf, i, 1)   If strFigBuf = "" Then    ar = Filter(Figs, strFig)    If CInt(ar(0)) = 0 Then j = 9 Else j = CInt(ar(0)) - 1    outBuf = Kanas(j)   ElseIf strFigBuf = strFig Then    outBuf = "ト"   Else    ar = Filter(Figs, strFig)    If CInt(ar(0)) = 0 Then j = 9 Else j = CInt(ar(0)) - 1    outBuf = Kanas(j)   End If   outChr = outChr & outBuf   strFigBuf = strFig '前の文字を確保  Next  ConvertKataKana = StrConv(outChr, vbNarrow) End Function

  • Cupper
  • ベストアンサー率32% (2123/6444)
回答No.3

置換えを行う順番を工夫してみましょう。 1.同じ数字が続く場合を先に処理します。 2.次に数字を文字に置換え。 3.最後に文字列の最後にゼロが続いた場合(文字列の最後に”コト”)これを空白に置き換える。 1,2は普通に置換えです 3はオートフィルタを設定して、オプションから「”コト”で終わる」を選択。   文字の入力されている範囲を選択 → 編集 → ジャンプ → セル選択 → 可視セル → OK   これで文字の最後に”コト”があるセルだけが選択されるので、置換えで”コト”を空白に置き換える。 マクロやVBAが分からないのであれば、面倒ですがこの方法を試してください。

noname#140971
noname#140971
回答No.1

12500______アイオコ 22800______トクコ 220800____トコクコ 800600____クココカコ このような複雑な変換はやっぱしVBAの出番かと思いますよ! 次の手順でたれば、さして難しいことではないです。 1、[Sheet1]タグを右クリックして[コードの表示(V)]をクリック。 2、メニューの[挿入(I)]-[標準モジュール]をクリック。 3、以下のコードをコピペ。 これで、B1=SujiXfer(A1) と式を設定すれば目的を達成します。 Public Function SujiXfer(ByVal Suji As String) As String   Suji = Suji & "*"   Suji = Replace(Suji, "00*", "0*")   Suji = Replace(Suji, "00*", "0*")   Suji = Replace(Suji, "0*", "0")   Suji = Replace(Suji, "11", "ト")   Suji = Replace(Suji, "22", "ト")   Suji = Replace(Suji, "33", "ト")   Suji = Replace(Suji, "44", "ト")   Suji = Replace(Suji, "55", "ト")   Suji = Replace(Suji, "66", "ト")   Suji = Replace(Suji, "77", "ト")   Suji = Replace(Suji, "88", "ト")   Suji = Replace(Suji, "99", "ト")   Suji = Replace(Suji, "00", "ト")   Suji = Replace(Suji, "1", "ア")   Suji = Replace(Suji, "2", "イ")   Suji = Replace(Suji, "3", "ウ")   Suji = Replace(Suji, "4", "エ")   Suji = Replace(Suji, "5", "オ")   Suji = Replace(Suji, "6", "カ")   Suji = Replace(Suji, "7", "キ")   Suji = Replace(Suji, "8", "ク")   Suji = Replace(Suji, "9", "ケ")   SujiXfer = Replace(Suji, "0", "コ") End Function なお、当方、Excelを操作したことがない門外漢です。 結果は保証しますが、外しているかも知れません。