• ベストアンサー

濁点を2文字に分ける方法、2文字にカウントする方法について

エクセルマクロ超初心者です。ユーザーフォームを作りました。フリガナを書き込むテキストボックスに入力した濁点を2文字に分けて、さらに2文字にカウントしたいのですが、どうすればいいのでしょうか?たとえば、「ガ」と入力すると「カ ゛」と表示され、かつ文字数も1文字ではなく2文字とカウントされるようにしたいのです。やりたいことは、このテキストボックスに入力した文字列を「登録ボタン」を押下後、エクセルシートに一文字1セルに分けて表示されるというものです。よろしくお願い致します。

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

質問の文字変換を行うユーザー定義関数を作ってみました。 元の文字は全角文字として、   変換後文字 = DakutenBunri(元の文字) のように使うと、変換後文字では濁点を分離しています。 また文字数は、LEN(変換後文字)でもとまります。 >エクセルシートに一文字1セルに分けて表示されるというものです この変換後文字を1文字単位に表示すればいいでしょう。 ご参考に。 標準モジュールに貼り付けます。 ↓ Public Const Daku1 = "がぎぐげござじずぜぞだぢづでどばびぶべぼガギグゲゴザジズゼゾダヂヅデドバビブベボ" Public Const Daku2 = "ぱぴぷぺぽパピプペポ" Function DakutenBunri(Moji As String)   Dim L As Integer '文字カウンタ   Dim elm As String '調べる文字   Dim pot1 As Integer '文字位置   Dim pot2 As Integer '文字位置   Dim newMoji As String '置き換え後の文字   For L = 1 To Len(Moji)     elm = Mid(Moji, L, 1)     pot1 = InStr(Daku1, elm)     pot2 = InStr(Daku2, elm)     If pot1 > 0 Then       newMoji = newMoji & Chr(Asc(elm) - 1) & "゛"     ElseIf pot2 > 0 Then       newMoji = newMoji & Chr(Asc(elm) - 2) & "゜"     Else       newMoji = newMoji & elm     End If   Next   DakutenBunri = newMoji End Function

kohiro
質問者

お礼

出来ました。感激です。何をどう書けばいいのか分からなかったので、定義関数を作ってくださり、本当にありがとうございました!

その他の回答 (1)

  • craftsman
  • ベストアンサー率49% (166/336)
回答No.1

 濁点付きかな文字の扱いは、2バイト文字(全角)の場合と1バイト文字(半角)の場合で違います。  どうしても濁点付き文字を文字と濁点に分けたいなら・・・。  文字列を一旦1バイト文字に変換し、バイト単位で分割するような方法を取ってはどうでしょうか?  REPRACE()を用いて、全てのかなもじに対して置き換えを行うか、VBAを使用してWSHのRegExpオブジェクトを使用して置き換えるか・・・。  ただし、1バイト文字にひらがなはありませんので、ひらがなも全て1バイトカタカタに変換する事になります。  ひらがなをひらがなのまま残したいなら、変換前に文字の種類を調べ、ひらがな/カタカナのフラグを作り、元の文字種類がひらがななら、変換・分割後にまたひらがなに置き換える操作が必要になりますね。