【VBA】セル内にあるデータを色とサイズに分けて別のセルに出力する
2017/02/26
概要
セル内のデータに色(カラー情報)とサイズ情報がある場合にそれを分けて別のセルに出力するマクロです。
今回は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。
ジャンルによってはかなり便利なマクロだと思います。ご参考まで。
注意書き
このマクロを使ったことで何か損害や不利益を被ったとしてもこちらで責任は負いかねます。そこは利用者個人の責任で何卒お願いしたく候。
あと個別のサポートとかもできませぬ。あしからず。
参照設定
・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。