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

指定セルに「名前」を入力するとリンクのフォルダから探し出し
当てはまる名前のエクセルファイルを開くにはどうしたらいいでしょうか?

「サーバー1」に「共有」と「非公開」フォルダがあります。
その二つのフォルダに「1班」から「10班」まであります(計20フォルダ)
その分岐しているフォルダの中から指定した「名前」のエクセルファイルを開きたいのですが
どのように組めばいいか教えてください。

\\ サーバー 1 \ 共有 \ 1班 \ 名前.xlsx

A 回答 (1件)

Option Explicit



Sub メインプロシージャ()

Dim n As Long
Dim フォルダ名 As String
Dim 班 As Long
Dim 名前 As String
Dim パス As String
Dim ファイルが存在する As Boolean

名前 = InputBox("Excel ファイルの名前を入力してください。")

If 名前 = "" Then Exit Sub

ファイルが存在する = False

For 班 = 1 To 10
For n = 1 To 2

Select Case n
Case 1: フォルダ名 = "共有"
Case 2: フォルダ名 = "非公開"
End Select

パス = "C:\サーバー1\" & フォルダ名 & "\" & 班 & "班\" & 名前 & ".xlsx"

If Dir(パス) <> "" Then
ファイルが存在する = True
GoTo 検索終了
End If

Next
Next

検索終了:
If ファイルが存在する Then

Workbooks.Open パス

Debug.Print "以下のファイルを開きました。"
Debug.Print パス

Else
MsgBox 名前 & ".xlsx は存在しません。", vbCritical
End If

End Sub





VBEで標準モジュールを追加し、上記のコードをコピペしてください。

フォルダ構造と開きたいブックの名前がすでに分かっていて、最下層のフォルダの数が20個であれば、単純に Dir にパスを渡せば、ファイルが存在しない場合のみ空文字列 "" が返ってきますから、あとは、あり得るパスを全20通り片っ端から試していけば、どれかが当たるというやり方を使うのが分かりやすくていいと思います。

名前 = ~

となっている部分を

名前 = Cells(1, 1)

などに置き換えるとセルから名前を読み込むこともできます。


上記のプログラムでは「サーバー1」という名前のフォルダが C ドライブの直下にあるという前提になっています。

パス = ~

となっている部分の「"C:\サーバー1\"」を必要に応じて変更してください。「1」は全角になっています。最後の「.xlsx」の部分を変更すれば、拡張子が「.xlsx」ではないファイルを開くこともできるはずです。

同じ名前の複数のブックを同時に開くことはできません。



他にもやり方があって、Dir を使わずに20通りのパスから直接 Workbooks.Open をしていくということもできます。





Option Explicit

Sub メインプロシージャ2()

Dim n As Long
Dim フォルダ名 As String
Dim 班 As Long
Dim 名前 As String
Dim パス As String

名前 = InputBox("Excel ファイルの名前を入力してください。")

If 名前 = "" Then Exit Sub

For 班 = 1 To 10
For n = 1 To 2

Select Case n
Case 1: フォルダ名 = "共有"
Case 2: フォルダ名 = "非公開"
End Select

パス = "C:\サーバー1\" & フォルダ名 & "\" & 班 & "班\" & 名前 & ".xlsx"
ブックを開く パス

Next
Next

End Sub
Sub ブックを開く(ByVal パス As String)
On Error Resume Next
Workbooks.Open パス
End Sub





探したい名前のブックが1つだとしたら、20通り中19通りは存在しないパスを指定して開こうとしていることになるので、エラーが発生するはずですから、On Error Resume Next などを使ってエラーが発生してもエラーメッセージを出さずに処理を続行するようにすれば、存在するパスに当たったときにブックが開くことになります。このプログラムはすごく簡易的なもので、エラーが発生したかどうかの判定ができませんから、ブックが開いた後も処理し続けます。

エラーを意図的に発生させることを嫌う人もいますから、通常はこちらではなく、最初に挙げたほうのプログラムでいいんじゃないかと思います。
    • good
    • 1

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