Like演算子とメタ文字

昨日まで、配列とコレクションの実験を幾つか行ってきた。
infoment.hatenablog.com
これらは、実務における以下の事例が切っ掛けだった。

  • サーバー上のファイル群について、そのパスを載せたExcelファイルがある。
  • パスは種別に細分類化されており、分類別シートに分かれて記載されている。
  • キーワード(毎回違う)を含む文字列を抽出し、先頭シートに書き出したい。


上記は5年ほど前に作成したツールで、抽出方法はこんな感じだ。

  • For Nextループで、各シートを検索する。
  • 検索ワードでシート毎に、Findメソッドで虱潰しに探す。
  • 探し出したパス(文字列)は、配列に都度拡張して格納。


この方法は一回の抽出に数分掛かる。そこで利用部門から先日受けた相談を機に、以下の方法に変更した。

  • For Nextで各シートを巡回し、全データを根こそぎコレクションに格納する。
    ※Like演算子を用い、キーワードを含む場合のみ格納する。
  • コレクションの内容を、配列に移植する。
  • 配列を先頭シートに貼り付ける。


結果、数分かかっていたものが0.5秒で終わるようになった。
これは上手くいった!と思いきや、特定キーワードが上手く抽出できない。
調べてみると、

〇〇#◇◇◇

というコード体系で、上手くいかないことが分かった。理由は直ぐに判明。
「#」はLike演算子におけるメタ文字(プログラムで特定の意味を持たせた文字)であり、「0~9」の何れか1文字を表すらしい。

やむを得ず、都度「#」を「_」に置換することで、何とか抽出できるようになった(処理時間:0.5秒 ⇒ 2.0秒)。

このコード体系は、少なくとも20年近く前には既に使用されていたらしい。その頃に「メタ文字」があったか否かは、良くわからない。

当時の諸先輩に対し、今の状況と立場で配慮を求めるのは酷な話だ。ならばせめてこれを教訓とし、後輩の皆さんが苦労しないよう、最大限努力しようと思った。

※それ以前に、5年前のコード(自作)が酷すぎて、大いに恥じ入った次第です。

参考まで。