プロが教える店舗&オフィスのセキュリティ対策術

VBA初心者です。ネットで検索をして試してみても想定通りにいかず頓挫しています。
以下の処理を行うマクロの作成方法のご教授をお願います。
(Excelバージョン2012、windows10を利用しています。)

①フォルダパス\\012345\ab\c\内のサブフォルダ内にある任意の文字を含む.xlsxファイルを検索して開く一覧を表示。(任意の文字:エクセルC3に入力)
②上記①で表示した一覧から選択をすると、選択した.xlsxファイルが開く。

A 回答 (3件)

#2です


返信へのアドバイスです。

>サブフォルダ内にある
とありましたので、FSOを使い、再帰処理でフォルダパス内にあるサブフォルダすべてに対してファイルを探しています。
再帰処理をしない場合は、該当ロジックを削除又は無効にしてください。
又、Dir関数にした方が処理速度が上がります。
vba fso 再帰処理やvba Dirなどでぐーぐる先生に聞いて確認してください。
    • good
    • 0

こんにちは、


①は一覧をクリックして開くと言う事?
②は、ファイル名指定で開くと言う事?

自身でデバッグ、改造が出来るとして、、参考


Sub Sample()
Call Filelink("\\012345\ab\c")
End Sub
Sub Filelink(Path As String)
Dim FSO As Object, Folder As Variant, File As Variant
Dim hyplink As Hyperlink
Dim i As Long: i = 1
Set FSO = CreateObject("Scripting.FileSystemObject")
For Each Folder In FSO.GetFolder(Path).SubFolders
Call Filelink(Folder.Path)
Next Folder
For Each File In FSO.GetFolder(Path).Files
Set hyplink = ActiveSheet.Hyperlinks.Add(Anchor:=Cells(i, 1), _
Address:=File.Path, _
TextToDisplay:=File.Name)
i = i + 1
Next File
End Sub


Sub Sample1()
Call FileSearchOpen("\\012345\ab\c", Range("C3").Value)
End Sub
Sub FileSearchOpen(Path As String, Target_Name As String)
Dim FSO As Object, Folder As Variant, File As Variant
Set FSO = CreateObject("Scripting.FileSystemObject")
For Each Folder In FSO.GetFolder(Path).SubFolders
Call FileSearchOpen(Folder.Path, Target_Name)
Next Folder
For Each File In FSO.GetFolder(Path).Files
If File.Name = Target_Name Then
CreateObject("Shell.Application").ShellExecute File
' Workbooks.Open File
Exit For
End If
Next File
End Sub

①Sampleを実行

②Sample1を実行
C3セル入力確定時をトリガーにするならシートイベントにしてください。
>選択した.xlsxファイルが開く
Workbooks.Open File でOK

新規ブックで自己責任で検証してください。
    • good
    • 0
この回答へのお礼

ありがとうございます。
検索ファイル数が多すぎるのか、「応答なし」になりながらも
抽出は継続して行われていることを確認しました。
教えていただいたことをベースに調整をかけてみます。

お礼日時:2021/01/18 16:55

こんにちは



どこまで作れて、何が「想定通りいかない」のかさっぱりわかりませんが・・・
>マクロの作成方法のご教授をお願います。
とのことなので、概略の考え方を。
(きちんと知りたければ、どこでどのように躓いているのかをキチンと説明した方が、適切な回答を得られると思います)


①に関しては、全ての.xlsxファイルをリストアップするようなマクロなら、検索すればいろいろ見つかると思います。
ですので、ほとんどそのまま利用できるのではと思います。

>「任意の文字を含む」
に限定する場合は、Dir関数等を利用してリストアップするケースであれば、検索対象を「*任意の文字列*.xlsx」のようにしておくことで、可能と思われます。
他の方法で行う場合あっても、リストに記入する前に、「任意の文字列を含んでいるか」を文字列チェックをして、該当しない場合は「リストに記入する」処理をスキップするように(=リストに記入しない)すればよいでしょう。


②に関しては、選択されたセルの内容を読み取って、それを開くという方法でもよいでしょうし、ファイル名だけからパスを作成するのは面倒なので、セルのハイパーリンク機能を利用して、①でリストに記入する際に一緒にリンクを設定しておくようにすれば、②に関するマクロは作成する必要が無くなるものと想像します。
    • good
    • 0
この回答へのお礼

ありがとうございます。
質問の仕方が分かりにくく申し訳ありません。
以後また質問する際には、アドバイス頂いたように躓いている点について理解しやすい様にまとめるようにします。
また、ハイパーリンク機能等、他の選択肢もあること勉強になりました。

お礼日時:2021/01/18 17:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A