ExcelファイルのVBA検索ツールを作ってみました。前回の記事はこちらです。
hirocom777.hatenadiary.org
今回は、前回紹介したツールの詳細(というほどでもない)を解説したいと思います。
小さなツールを作って少しずつ改良をしていくとすごく勉強になるよ !!
プログラミングの勉強方法は色々ありますが、これは僕がよくやる方法です。 小さなツールを作って少しずつ改善していく・・・効果は抜群だと感じています。今回ご紹介したツールも色々な学びがありましたので、ここで共有したいと思います。興味のある方は、以下からダウンロードして使ってみてください。
他のExcelファイルのVBAにアクセスできる
前回でもお話ししましたが、このツールは以下のサイトを参考にしました。
officetanaka.net
VBAってこんなことも出来るんですね。この記事読んだのでツール作ったも同然です。普段作るツールではこの手法はあまり使わないのですが、この手法は知っておくと便利。逆にこの手法を理解するためにツールを作ったとも言えます。手法を理解するためにテーマを選定してツールを作るのはアリだと思います。
ファイルシステムオブジェクト、フォルダオブジェクト
正直言っちゃいますと、このツールで初めてFSO(ファイルシステムオブジェクト、フォルダオブジェクト)を使いました。
Dim objFso As Object Set objFso = CreateObject("Scripting.FilesystemObject")
とか
Dim objFolder As Object Set objFolder = objFso.GetFolder(TopSheet.txtFolder.Text)
の様に宣言が面倒なんですよね。でも、今回の様にファイルを取り扱うことが中心となるツールでは強力な威力を発揮しました。一度使ってみるとハードルはぐんと下がります。今後は色々なところで応用できそうです。
検索機能(パターンマッチ)
検索機能についてはこだわりました。このツールのキーとも言えますからね。このツールでは検索機能を実現するためにLike演算子を使っています。普通、指定文字列の検索にはInstr関数を使ったりするのですが、ここは意図的にLike演算子を使いました。実際の検索でもパターンマッチの機能が使えるようにするためです。このツールでは検索文字列の前後に"*"をつけることでLike演算子を使った検索を実現しています。以下のようになりますね。
検索対象 like "*検索文字列*"
この形にすると、検索文字列の中にパターンマッチの表記方法を適用できます。"[1-5]"(数字の1~5にマッチする)とか、"A?C"(ABCとかA3Cとかにマッチする)とか検索方法に幅を持たせることが出来るんです。VBAの機能をツールの機能として引き出しています。面白いでしょ!!
検索機能(全角半角の区別、大文字小文字の区別)
検索機能もう一つのこだわりはこの機能です。ワープロやエディタの検索機能によく付いている設定項目です。どうやって実現しているんでしょうか?
実際のところはツールの中を確認できないので何とも言えないのですが、このツールではVBAのStrConv関数で実現しています。
StrConv関数の使い方は以下が詳しいかと・・・
officetanaka.net
全角半角を区別しない場合には、検索文字列、検索対象文字列とも半角文字列に変換しています。
(引数 conversionはvbNarrow)
大文字小文字を区別しない場合には、検索文字列、検索対象文字列とも小文字の文字列に変換しています。
(引数 conversionはvbLowerCase)
両方とも区別しない場合には、検索文字列、検索対象文字列とも半角小文字に変換ですね。
(引数 conversionはvbLowerCase+vbNarrow)
前出のパターンマッチ機能とも併せて検索機能を実現しています。このツールでいろいろな検索パターンを試してみると面白いと思います。