半角カタカナを検索します。検索は1文字ずつではなく濁音や半濁音や長音を含む連続する半角カタカナはまとめて検索しています。その後、検索で見つかった半角カタカナの数だけループし、見つかった半角カタカナを全角に変換し、元々半角カタカナがあった位置に差し込んでいます。引数に変換前の文字列、第二引数に変換後の文字列が返却されます。RegExpクラスのインスタンス変数を作成しています。事前に参照設定をしていることが前提になります。正規表現での検索結果を格納するMatchCollectionクラスの変数です。MatchCollectionクラスの変数の各コレクション保持用の検索結果Matchクラスの変数です。処理中に使うローカル変数です。Patternプロパティには正規表現での検索条件を指定します。ここでは正規表現での半角カタカナである[。-゚]+を指定しています。半角カタカナが連続する場合はまとめて検索一致にするために+を指定しています。-゚]は文字コードでの[\uFF61-\uFF9F]と書いても同じ意味になります。-゚]の方がかわいいのでこっちを使ってます。Globalプロパティには文字列の検索範囲を指定します。Trueは文字列の最後まで検索します。指定した検索条件で第一引数の文字列から検索します。検索結果はMatchCollectionクラスオブジェクトが返却されます。ループ処理用にループカウンタ変数に検索で一致した数を設定しています。引数の文字列の内容を初期値として第二引数に設定しています。以降の処理で半角カタカナの部分は全角カタカナに変換されていきます。見つかった検索結果を後ろからループしています。ここは好みの問題ですが、ループで半角から全角に変換されると変換後のa_sZen変数の文字列長が短くなります。その際に、MatchCollectionクラスのoMatches変数に格納されている各検索結果のFirstIndexの値がループ中に全角に変換後のa_sZen変数とは異なってきます。後ろからループを行うとそれを防ぐことが出来るため、後ろからループしています。現ループの検索結果を取得しています。現ループの検索結果の半角カタカナをStrConv関数で全角に変換しています。ここで変換しているのは検索で見つかった半角カタカナの部分だけになります。第二引数の変数の半角カタカナ部分のみを全角カタカナに変換しています。Left関数とRight関数で変換対象外の部分を連結しています。このやり方ではなくReplace関数で一気に文字列全体に対して変換を行うとバグになります。゙」となってしまいます。原因は正規表現で検索した場合、「パ」「ガーパ」「カ」「バー」の4つが検索されます。これを先頭から文字列全体に対してReplace変換すると、1つ目の「パ」はいいのですが、2つ目が「ガーパ」とパだけが全角になり、次のループで「ガーパ」がヒットせず、変換が正しくおこなえない恐れがあります。利用サンプルA1からB2セルに入力されている状態で、それらのセルの値の半角カタカナを全角に変換して、A4セル以降に貼り付けるサンプルです。実行後(セルの幅は手で変えてます)処理速度の向上方法CnvHanKanaToZen関数の内部処理でRegExpクラスをNewしていますが、これを呼び出し元で行うようにするとインスタンスの生成がなくなるため処理速度は向上します。以下のマクロは半角カタカナと全角カタカナには何があるのかを列挙しておいて、変換元の文字列に含まれる半角カタカナを全て全角カタカナに置換する方法です。半角カタカナの25文字分までが濁音と半濁音の2文字用、といった決め打ちのコーディングで、どちらかと言えば、「動けばOK」みたいなコードです。「美しくない!」と感じる方にはおすすめしません。正規表現や文字コードを意識する必要がなく、処理はより単純です。使い方は先に紹介した関数と同じですので省略します。"ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポ。"ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポ。"ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポ。"ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポ。Excel作業をVBAで効率化シェアお問合わせTOPへ。