ぼくらの研究

ぼくらのための研究をしていきます。

【VBA】正規表現を使って1つのセルの内容を2つのセルに分割する

      2017/02/26

VBA

 

コード内容

先にコードから紹介します。


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行目から順に空白セルになるまで繰り返し実行していきます。

参照設定

VBA参照設定

・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操作を覚えるのに一番良いと思う本(ぼくはこれで覚えました)