ぼくらの研究

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

【VBA】セル内にあるデータを色とサイズに分けて別のセルに出力する

      2017/02/26

VBA

 

概要

セル内のデータに色(カラー情報)とサイズ情報がある場合にそれを分けて別のセルに出力するマクロです。

今回はA列にカラー情報とサイズ情報が入っていた場合に、B列にカラー情報、C列にサイズ情報を出力します。

Black S Black S
Orange XL Orange XL

こんな感じですね。

コード内容

Option Explicit

Sub ColorSize()

Dim Rng As Range, Reg As New RegExp, mcs As MatchCollection
 
Set Rng = Sheet1.Range("A1")
Reg.Pattern = "^(.*?)([YTSMLX/]{1,6}|YOUTH|[\d.]+|[\d.-]+cm|\d+cm wide|\d+in|[TSMLX/]{1,2}[\[\(][\d/]+[\]\)]|[\d.]+/[\d.]+|\d+T|[SMLX]{1,2}/Tall|[TQ]LS [\d.]+/[\d.]+)$"
 
Do Until Rng.Value = "" 
 Set mcs = Reg.Execute(Rng.Value)
 Rng.EntireRow.Columns(2).Value = mcs(0).SubMatches(0)
 Rng.EntireRow.Columns(3).Value = mcs(0).SubMatches(1)
 Set Rng = Rng.Offset(1)
 DoEvents
Loop
 
MsgBox "完了"

End Sub

コードの説明

今回は正規表現パターンを使って分類。

RegExpオブジェクト、Patternプロパティを使って正規表現によるマッチングを行います。

Reg.Pattern = "^(.*?)([YTSMLX/]{1,6}|YOUTH|[\d.]+|[\d.-]+cm|[TSMLX/]{1,2}[\[\(][\d/]+[\]\)]|[\d.]+/[\d.]+|\d+T|[SMLX]{1,2}/Large|[TQ]LS [\d.]+/[\d.]+)$"

のところが条件設定ですね。

この正規表現の条件設定方法に関してはググって調べたりして自分でいろいろ試してみるのが一番近道だと思います。

参考リンクhttp://officetanaka.net/excel/vba/tips/tips38.htm

そしてこの条件に合致しないものをB列、合致したものをC列のセルに出力していきます。

Rng.EntireRow.Columns(2).Value = mcs(0).SubMatches(0)
Rng.EntireRow.Columns(3).Value = mcs(0).SubMatches(1)

の部分が出力部です。出力したい列を変えたい場合はColumnsの後の数字を変更するだけでOK。

ジャンルによってはかなり便利なマクロだと思います。ご参考まで。

 

注意書き

このマクロを使ったことで何か損害や不利益を被ったとしてもこちらで責任は負いかねます。そこは利用者個人の責任で何卒お願いしたく候。

あと個別のサポートとかもできませぬ。あしからず。

参照設定

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