【VBA】正規表現を使って1つのセルの内容を2つのセルに分割する
2017/02/26
コード内容
先にコードから紹介します。
Option Explicit Sub セル内容をサイズ情報とそうじゃない情報で2つのセルに分ける() Dim Rng As Range Dim Eregs As New RegExp Dim Mtchcs As MatchCollection Set Rng = Sheet1.Range("A1") Eregs.Pattern = "^(.*?)([YTSMLX/]{1,6}|[\d.]+|[\d.-]+cm|\d+in|\d+\-\d+in|[TSMLX/]{1,2}[\[\(][\d/]+[\]\)]|[\d.]+/[\d.]+|\d+T|\d+mm|\d+in\(\d+cm\)|\d+\-\d+in\(\d+\-\d+cm\)|[SMLX]{1,2}/Tall|[TQ]LS [\d.]+/[\d.]+)$" Do Set Mtchcs = Eregs.Execute(Rng.Value) Rng.EntireRow.Columns(3).Value = Mtchcs(0).SubMatches(0) Rng.EntireRow.Columns(2).Value = Mtchcs(0).SubMatches(1) Set Rng = Rng.Offset(1) Loop Until Rng.Value = "" End Sub
コードの説明
A列の対象セルの中身のうち、設定した正規表現のパターンに一致したものをB列に出力、そのパターンから外れたものをC列に出力します。
今回はA列のセルにサイズ情報やカラー情報が混在しているものをいくつか想定して
Eregs.Pattern = "^(.*?)([YTSMLX/]{1,6}[\d.]+|[\d.-]+cm|\d+in|\d+\-\d+in|[TSMLX/]{1,2}[\[\(][\d/]+[\]\)]|[\d.]+/[\d.]+|\d+T|\d+mm|\d+in\(\d+cm\)|\d+\-\d+in\(\d+\-\d+cm\)|[SMLX]{1,2}/Tall|[TQ]LS [\d.]+/[\d.]+)$"
としています。
※ちなみに\(バックスラッシュ)は\(円マーク)に置き換えてください。こういう表記の仕方になっているのはWordPressのプラグインとかその他もろもろの諸事情によるものです。申し訳。
この場合だとB列にサイズ情報、C列にカラー情報が出力されます。
条件(パターン)はおのおのの用途に合わせて好きにカスタマイズしてどうぞ。1セルにまとめて入ってる住所と電話番号、郵便番号を分けたりするのもできるそう。
正規表現の組み方に関しては以下のページが参考になると思います。
参考リンク正規表現の構文 Microsoft
上記のようにセル内容を2つに分割、出力する操作をA列のセル1行目から順に空白セルになるまで繰り返し実行していきます。
参照設定
・Visual Basic For Applications
・Microsoft Excel 15.0 Object Library
・OLE Automation
・Microsoft Office 15.0 Object Library
・Microsoft VBScript Regular Expressions 5.5
5つにチェック入れとけばOK。
VBAのIE操作を覚えるのに一番良いと思う本(ぼくはこれで覚えました)
近田 伸矢,植木 悠二,上田 寛 インプレス 2013-04-19