- ベストアンサー
エクセルで数字を半角カタカナに変換
エクセルで数字を半角カタカナ 1→ア、2→イ、3→ウ、4→エ、5→オ 6→カ、7→キ、8→ク、9→ケ、0→コ、 ト → おなじ数字が続く時 に置き換えたいのですが、巧くいきません。 マクロが出来ないので、関数を組み合わせたりしましたが、全然ダメです。 例) 12500 → アイオ(最後にゼロが続く時はゼロを無視) 120500 → アイコオ 22800 → イトク 220800 → イトコク 800600 → クコトカ こんな感じですが、なかなか巧くいきません。お教え下さい。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
ユーザー定義関数を作りました。 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)
◆ANo.5のmaron--5です ◆B1の式がまちっがっていましたので訂正します B1=C1&D1&E1&F1&G1&H1&I1
- maron--5
- ベストアンサー率36% (321/877)
◆関数による方法です 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)
こんばんは。 =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)
置換えを行う順番を工夫してみましょう。 1.同じ数字が続く場合を先に処理します。 2.次に数字を文字に置換え。 3.最後に文字列の最後にゼロが続いた場合(文字列の最後に”コト”)これを空白に置き換える。 1,2は普通に置換えです 3はオートフィルタを設定して、オプションから「”コト”で終わる」を選択。 文字の入力されている範囲を選択 → 編集 → ジャンプ → セル選択 → 可視セル → OK これで文字の最後に”コト”があるセルだけが選択されるので、置換えで”コト”を空白に置き換える。 マクロやVBAが分からないのであれば、面倒ですがこの方法を試してください。
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を操作したことがない門外漢です。 結果は保証しますが、外しているかも知れません。
お礼
いやあー、色々なやり方があるのですね。皆様のお陰で考えている事が解決出来ました。 maron--5さんの回答欄をお借りして皆様にお礼申し上げます。有難う御座いました。