Microsoft Excel 2007 マクロで正規表現

Microsoft Excel 2007 マクロで正規表現

Excel 2007のマクロで正規表現を使った時のメモです。
正規表現を使用する必要はなかったのですが、何か今後のためになるかと思って使ってみました。

私が実現したいことは以下
  • ワークブック内の全てのシートに対して実行したい
  • 特定のセルに入っている"100 ml"の様な値を100とmlに分けたい(どうやら%は数値とくっついているようなので別に処理しないといけない)
具体的には
項目名1 項目名2 項目名3
項目1 100 ml
項目名1 項目名2 項目名3
項目1 100 ml
みたいな。

以下手順です。

1.Excelを開く

言わずもがな。

2.Visual Basicを開く

Excelを開いた状態でAlt + F11を押す。

3.VBScriptで正規表現を使用できるようにする

[ツール]-[参照設定]から、Microsoft VBScript Regular Expression 5.5をチェックしてOKをクリック。

4.コードを記述する。

初心者ですので見栄えはあれですけど、とりあえず以下のコードで自分がやりたいことが実現できました。%の処理についてはまだやってません。そのうちかきます。
matchcollection, match, submatchesの関係を理解するのが自分にはちょっと時間がかかりました。

Sub ParseUnit()
    Dim i As Long, msg As String
    Dim RE As New VBScript_RegExp_55.RegExp
    Dim mc As VBScript_RegExp_55.MatchCollection
    Dim m As VBScript_RegExp_55.Match
    Dim sm As VBScript_RegExp_55.SubMatches
    Dim sheet As Worksheet
 
 
    For Each sheet In Worksheets
        sheet.Activate
        '数値 空白 単位となる
        '%は数値とくっついてるので再考
        strPattern = "^(.*)\s(.*)$"
        With RE
            .Pattern = strPattern
            .IgnoreCase = True
            .Global = False
            '1行目は項目なので飛ばす
            i = 2
            'PIDが存在する行まで実行
            Do Until Cells(i, 1).Value = Empty
            If .Test(Cells(i, 4)) Then
                Set mc = .Execute(Cells(i, 4))
                Set m = mc.Item(0)
                Set sm = m.SubMatches
                '数値はそのままの位置に
                Cells(i, 4).Value = sm.Item(0)
                '単位を一つ右のセルに移動
                Cells(i, 5).Value = sm.Item(1)
            End If
            i = i + 1
            Loop
        End With
    Next
 
    MsgBox "end"
    Set mc = Nothing
    Set RE = Nothing
End Sub
 
 
 
 
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。