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