正規表現で数字以外を抽出
文字列から数字以外を抽出する方法にはいくつか考えられます。
ネットでは1文字ずつ判別する方法が紹介されていることが多いのですが、その方法では、ループ処理、文字判別処理、文字列連結処理、という3段階が必要になります。
しかし正規表現を利用すればループ処理と文字列連結処理は不要になり、文字判別処理だけで単純になります。そして、一番高速に動作します。
ここではその正規表現での方法を紹介します。ちなみに正規表現が分からなくてもコピペで利用できます。
なお、ここでの数字とは全角と半角の両方を指します。
事前設定
以下のVBAコードは事前に正規表現の参照設定をしておく必要があります。
VBAの画面でツールメニュー→参照設定のダイアログを開き、「Microsoft VBScript Regular Expressions 5.5」にチェックを付けることで正規表現のRegExpクラスが利用できるようになります。
文字列から数字以外を抽出する関数
正規表現を利用しているためコードがとても単純になります。
ただし、少し工夫したコードになっています。
単純に数字以外を検索する方法であれば、「0から9以外を検索し、それらを全て抽出する」というコードになります。
しかしそれではコードが長くなるため、「数字を””の空文字に置き換えて数字以外だけを残す」という方法にしています。
なお、この関数は全角と半角の両方の数字を除外します。半角数字以外を抽出する場合は7行目の[0-90-9]を[0-9]に書き換えてください。また、全角数字以外を抽出する場合は[0-90-9]を[0-9]に書き換えてください。ブラウザでは分かりにくい場合もあるのですが、[0-90-9]の数字は左が半角、右が全角です。
1 2 3 4 5 6 7 8 9 10 11 12 |
'// 引数1:対象文字列 '// 引数2:検索結果 Sub FindOtherNumberRegExp(s, result) Dim reg As New RegExp '// 正規表現クラスオブジェクト '// 検索条件=数字を抽出 reg.Pattern = "[0-90-9]" '// 文字列の最後まで検索する reg.Global = True '// 指定セルの数字を空文字に置き換える result = reg.Replace(s, "") End Sub |
利用方法
上のFindOtherNumberRegExp関数を利用するサンプルコードです。
引数に「あいう1234567890abc1」と入力されているA1セルと抽出結果を返す変数を渡します。
1 2 3 4 5 6 |
Sub FindOtherNumberCallTest() Dim s Call FindOtherNumberRegExp(Range("A1").Value, s) Debug.Print s End Sub |
実行結果
あいうabc