今回は再開初回なので取り敢えず、
技術屋というかエンジニア必修科目の一つ、正規表現についてまとめてみます。
- そもそも正規表現とは
- 応用範囲と資料
- エクセルで正規表現を使うには
エクセルは検索・照合に力を発揮するアプリケーションですが、
通常の操作や関数としては、正規表現を扱うことは出来ません。
ただ環境を整理したり、VBAから呼び出すことで機能を扱うことが出来ます。
そもそも正規表現とは何だ?
よく値の照合や検索を行う時に、変数の一致(=)以上・以下(<=・>=)等しくない(<>)NOT(否定)といった演算子で、データ全体や一部を比較する手段はあるのですが、部分的な照合を取る時には、あらかじめ分割したデータに対して前準備をした上で比較演算を行うことを、想定されるパターン全てに用意する必要性に迫られる時があります。
例えば、比較演算では手間がかかる処理があります。
Dim txt As String, keyword As String
Dim cnt As Long, mt As Long
txt = "生麦生米生卵李も桃も桃の内"
keyword = "*も桃*"
mt = 0
For cnt = 0 To Len(txt)
If txt Like keyword Then
mt = mt + 1
End If
Next cnt
If mt > 0 Then
MsgBox ("「" & keyword & "」が見つかりました")
Else
MsgBox ("「" & keyword & "」は見つかりませんでした")
End If
このケースでは、ワイルドカードを使って検出自体はできますが、それ以上の処理を作ろうとすると、途端に難しくなることも分かります。例えばマッチした数を求めるにしても、面倒な処理が必要になってきます。
(私には時間もかかり過ぎて少し荷物が重いので、今回は割愛させて頂きます)
上記のようなケースでも、正規表現で行うと平易となり、非常に短い処理で済みます。
Dim txt As String, keyword As String
Dim reg As Object
Set reg = CreateObject("VBScript.RegExp")
txt = "生麦生米生卵李も桃も桃の内"
reg.Pattern = "も桃"
keyword = "も桃"
If reg.test(txt) Then
MsgBox ("「" & keyword & "」が見つかりました")
Else
MsgBox ("「" & keyword & "」は見つかりませんでした")
End If
End Sub
処理がシンプルになるのが見て取れ、また応用のパターンも簡単に組み立てることが出来ます。
こうした機械に理解しやすい形で、かつ短いパターンで表現をすることで、それを用いた処理も可能になるので、繰り返しパターンに沿った処理を行い検出・置換えといった処理が可能となります。そうした意味で、正規表現はデータを扱う上で重要な位置付けを持っていると言えます。
応用範囲と資料について
Excelをまとめたサイトはそれこそ星の数ほどあり、甲乙つけがたいものがあります。
実際に使いこなすため理解するなら、こちらの初心者歓迎!手と目で覚える正規表現入門・その1「さまざまな形式の電話番号を検索しよう」を読めば間違いないのではと。可視化サイトも参照させて頂きました。
・サルにもわかる正規表現入門は、簡素でHTML表現も工夫されているので見やすいです。
・エクセルの真髄
・オフィス田中
・正規表現可視化サイト
強力なデータ照合・検索機能を持っているExcelで、敢えて手間を書けてまで学習して、オブジェクトを追加してメモリを圧迫してまで、機能強化を図る理由はどこにあるでしょうか?
このパターンマッチングというものは想像以上に強力で、例えばシート全体に対しても、まとめて照合・検索を行うことも可能になります。
現状の運用上・変えられないシートと、改善の目標とする改善先を結びつけることも可能になります。私が何となくでやって来たプログラムを、深く理解する必要を感じた最初の課題もこれであったように思います。
ゴチャゴチャになっている構成のExcelデータを探す時に強力な武器になり得る言語で、どんなプログラム言語や環境でも、幅広く共通に使えます。データの重要性や前処理が一つのテーマになっている昨今こそ、改めてキッチリとマスターしてく意味が大きいように感じています。
たぶん続きます