複数フォルダ内からファイルを検索 複数キーワードも|Step2

Excel VBA 検索編 Step2

Step2 (このページ)は、Step1 の続きになっています。
VBAを使って複数の検索結果を表示させる方法について解説します。

Step1 を読まれた方 又は VBA でファイル検索する方法をすでに知っている方は、このままお読みください。Step1 の内容は割愛しておりますので、まだ Step1 を読まれていない方 又は VBA でファイル検索する方法を知りたい方は、先に下記のページを読まれることをお勧めします。

【VBA】複数フォルダ内からファイルを検索 複数キーワードも|Step1
このページではVBAを使って複数フォルダ内のファイルを検索する方法について解説しています。 しかもキーワードも複数の場合に対応! このページで紹介しているVBAは、検索するフォルダとキーワードをセットして、VBAを起動させると後はV...

簡単な処理(検索のみ)~ 実用的な処理 までを Step1 ~ Step7 の 7段階に区切っています。

▼Step1 ~ Step7 の違い

Step キーワード フォルダ ファイル シート 検索対象
1 1つ 1つ 1つ 1つ 1つ
2 1つ 1つ 1つ 1つ 複数
3 1つ 1つ 1つ 複数 複数
4 1つ 1つ 複数 複数 複数
5 1つ 複数 複数 複数 複数
6 複数 複数 複数 複数 複数
7 複数 複数 複数 複数 複数

※ Step6に(処理速度やエラー回避などの)機能を追加したものがStep7となります。

▼まずは処理内容についてこちらをご覧ください

動画の説明

0:00
検索対象のファイルの確認

0:24
キーワードの設定

0:39
マクロボタンの設定

2:20
VBAの起動(Step2)

2:29
検索結果の表示

2:39
検索結果の正しさの確認

3:20
VBAの起動(クリア)

3:25
検索結果の削除

Step2(プロシージャ)の説明

①ファイルを開く

②ワークシートを入れ替える度に下記②-1 ~ ②-2を繰り返す

②-1キーワードを検索する

②-2検索結果を表示する

③ファイルを閉じる

コードの説明(Step2)

▼Step2 の ソースコードについてはこちらから入手してください
Step2のソースコード ← クリックすると入手できます

(グレー色はコードの抜粋。黒色は説明文です。)

※ Step1 → Step2 にかけての変更箇所については、

(変更箇所) ‘Step2

‘↓Step2
(変更箇所)
‘↑Step2

と表示しています。

Dim MyRange2 As range

検索できるように変数(MyRange)を設定
1個目のキーワードは、MyRange
2個目以降のキーワードは、MyRange2
で検索します

Dim i As Long: i = 2

検索結果を並べて表示するための変数(i)を設定

Application.ScreenUpdating = False

処理速度が速くなるようにしています
ファイルを検索する時はファイルを開いたり閉じたりします
パソコンの裏側ではファイルの開閉は実行されるのですが、パソコンの表側ではファイルの開閉は表示されないようにしています

‘keyword = “ノブシゲ”
keyword = ThisWorkbook.Worksheets(1).range(“A2”)

A2 に 記載されたキーワードを使用しています

‘MsgBox keyword & “は、” & MyRange.Address(Rowabsolute:=False, columnabsolute:=False) & “にあります”
With ThisWorkbook.Sheets(1)
.Cells(i, “H”) = MyRange.Address(Rowabsolute:=False, columnabsolute:=False)
i = i + 1
End With

検索結果を、H列に表示
(メッセージボックスによる表示は中止しています)

Set MyRange2 = targetBk.Worksheets(1).Cells.Find(what:=keyword, after:=Cells(MyRange.row, MyRange.Column))

2個目のキーワードの場所を検索

If Not MyRange2 Is Nothing Then

もし2個目のキーワードが存在する場合以下の処理を実行します

Do While MyRange.row <> MyRange2.row Or MyRange.Column <> MyRange2.Column

2個目以降のキーワードが存在する限り以下の処理を実行します
これは Do While文 と呼ばれる構文です
条件に合致する限り Do While (条件) ~ Loop の間に書かれた処理を実行し続けます

    Do While (条件)
    (処理内容)
    Loop
‘MsgBox keyword & “は、” & MyRange2.Address(Rowabsolute:=False, columnabsolute:=False) & “にあります”
With ThisWorkbook.Sheets(1)
.Cells(i, “H”) = MyRange2.Address(Rowabsolute:=False, columnabsolute:=False)
i = i + 1
End With

2つ目以降の検索結果をH列に表示
(メッセージボックスによる表示は中止しています)

Set MyRange2 = targetBk.Worksheets(1).Cells.Find(what:=keyword, after:=Cells(MyRange2.row, MyRange2.Column))

検索する範囲を再度設定しています

‘Else
‘MsgBox keyword & “はありません”

メッセージボックスによる検索結果の表示は中止しています

Set MyRange2 = Nothing

Set ~ As ~ のように、宣言している変数は、処理の最後で中身を空にします
これを実行しておくことで思わぬエラーを回避しています。

Application.ScreenUpdating = True

ファイルの開閉が表示されるようにしています
処理の最後で初期設定に戻しています
(初期設定:True → 処理の最初:Flase → 処理の最後:True)

MsgBox “検索完了しました”

処理が終了したときに、メッセージボックスで表示します

Step2 (このページ)では、複数の検索結果を表示させる方法について説明しました
Do While ~ Loop 構文により、キーワードが見つからなくなるまで検索することができます
次の Step3 では複数のワークシートについて検索する方法について解説します

エクセルVBA【複数フォルダの検索作業を自動化】|Step3
Step3 (このページ)は、Step2 の続きになっています。 VBAを使って、複数のワークシートに対してキーワードを検索する方法について解説します Step2 を読まれた方 又は VBA で複数の検索結果を表示させる方法をすでに...

おすすめ書籍

おすすめの書籍①(初級編)

ググってもVBAのことを調べることはできますが断片的な情報が多いです
この本で全体像を理解しておくとググったときに断片的な情報を補完してくれるのでより理解できるようになります

https://amzn.to/3b1yqRw

おすすめ書籍②(中級編)

メソッド&プロパティをたくさん知っているとできることは多くなっていきます
ただし全て使えるとは限りませんよね
「自分がしたいこと」を実現するために知っておくべきメソッド&プロパティを無駄なく調べることができ効率よくメソッド&プロパティを習得できます

https://amzn.to/3PXpmfv

おすすめ書籍③(上級編)

かなりボリュームはありますがとても読みやすいです
1章から順番に読んでいくことでVBAの構造が理解できるようになっています
読み終えるまでとても時間がかかりましたがとてもためになりました
VBAは作った後のメンテナンスが重要なのですが、この本を読むと
とてもメンテナンスのしやすいコードがかけるようになります

https://amzn.to/3b4sqre

コメント

この記事が気に入ったら
いいね!しよう
最新情報をお届けします。
タイトルとURLをコピーしました