まえがき
私の業務では、古くなって廃棄した機器の設定情報を削除するために、100個ぐらいのテキストから、特定の文字があるものを見つけ出す必要がありました。
流石に手作業で全部のテキストを検索かけていくのは、時間がかかりすぎるので、これが週1回ぐらいの作業となると、膨大な時間を損失する事になります。
テキストエディタの機能によっては検索できるものもありますが、自分がやりたいと思った事を細かくやろうとすると自身でプログラムを作成する必要があります。
詳細は説明に書いていますが、headやtailなどの拡張機能もつけています。
今回は複数のテキストファイルから、特定の文字を含むものを探し出すマクロを無料配布したいと思います。ライセンス権利は作者にありますので、無断での二次配布や、転売、改造は認めません。
こちらをクリックしてダウンロードしてください。
使い方の説明
画面のイメージはこんな感じです。
前後文字チェック
[前後文字チェック]は、前後に数字や文字が入っている場合は、その検索結果をグレーに塗りつぶす機能です。
チェック有が推奨です。
例えば、検索ワードが[192.168.100.1]の場合は、[192.168.100.15]や[192.168.100.18]も検索対象となってしまいますが、量が多い場合は目検でこれらを除外するのは大変ですので、自動的にグレーに塗りつぶしてくれます。例外的なパターンもあると思うので、後で人間が判断できるように削除ではなく塗りつぶしという選択にしました。
[192.168.100.112]のように他で検索対象としているものは、塗りつぶし無しになるようにしています。
検索フォルダ
検索対象のテキスト等が入ったフォルダを指定してください。
対象ファイル拡張子
検索対象のファイルの拡張子を指定できます。[txt]だけ検索したい場合、[log]だけ検索したい場合などは指定して下さい。
特に指定しない場合は[*](アスタリスク)にしておくとすべての拡張子を検索できるのでお勧めです。
また、同じフォルダにExcelなどのテキストエディタで検索できないファイルがあるとマクロが停止してしまうので、その場合は、検索対象のファイルの拡張子を指定してください。
head(対象の前行表示)
検索キーワードの行だけでなく、対象の前の行も表示させる事が可能です。
例えばhead2の場合は、検索ワードから2行上の行まで表示されます。
[前後文字チェック]との組み合わせは相性が悪いので、この機能を使う場合は、[前後文字チェック]を[無]にする事をお勧めします。
tail(対象の後続行表示)
検索キーワードの行だけでなく、対象の後の行も表示させる事が可能です。
例えばtail3の場合は、検索ワードから3行下の行まで表示されます。
[前後文字チェック]との組み合わせは相性が悪いので、この機能を使う場合は、[前後文字チェック]を[無]にする事をお勧めします。
検索キーワード
検索させる対象となるキーワードを指定します。
検索キーワードの数は拡張しやすいようにプログラムを組んであるので、しばらく利用してみて必要に応じて拡張する予定です。大量のデータを検索した際に、どの程度の時間がかかるのか確認してから拡張しようという意図で、ver4.0では30個にしています。
[ファイルを検索]ボタン
検索を実行します。結果シートが作成されて検索結果が表示されます。既に結果シートがある場合は、既存の結果シートは()番号をつけてコピーされます。
30個以上のデータ検索をする場合は、前の結果を残したまま追加で検索すると思うので、このような動作としています。
[結果を保存]ボタン
[設定]シートを除くファイルを、[Search-log.xlsm]として[検索フォルダ]に保存します。
通常のExcelシート(.xlsx)として保存したかったのですが、マクロで強制的に名前を変えると正常に開かないデータになってしまうので(.xlsm)としています。そのままでも問題ないですが、データ容量を抑えたい場合は、手動で通常のExcelシート(.xlsx)として保存してください。
結果を削除
結果シートを削除してくれるマクロです。前回の結果を削除してから新たに検索したい場合は、最初に実行してください。
[設定]シート以外はすべて削除するので、残したい[結果]シートがある場合は、手動でシート削除してください。
あとがき
本来であればコード開示をしても良かったのですが、ベースとなる部分は7年前につくっていて、コードが全体的に拙さを感じる部分で恥ずかしいので、非公開とさせて頂いております。
基本的には、他の記事を読み進めて頂ければ作成できる内容ですので、中級者の方は、まずはこれと同等のものを自作できるかチャレンジして貰えればと思います。
現時点で考えられるだけでも、検索の初期判定を効率化できたり、検索を配列を使って高速化できるなどの改良点がありますので、まだまだ途中段階のものではありますが、少なくとも私の業務で利用するレベルではストレスなく利用できるレベルですので、現状はこれで良いかと思っております。
時間があれば、これを更に改良して、じっくり解説する記事も掲載したいと思います。