No.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 などを使ってエラーが発生してもエラーメッセージを出さずに処理を続行するようにすれば、存在するパスに当たったときにブックが開くことになります。このプログラムはすごく簡易的なもので、エラーが発生したかどうかの判定ができませんから、ブックが開いた後も処理し続けます。
エラーを意図的に発生させることを嫌う人もいますから、通常はこちらではなく、最初に挙げたほうのプログラムでいいんじゃないかと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/08 11:02
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/02/21 11:19
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/21 09:28
- Excel(エクセル) フォルダ内のエクセルファイルを開かずにデータ採取する関数式 2 2022/12/22 22:15
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/20 10:00
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/03 09:11
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/07/01 10:35
- Visual Basic(VBA) エクセルのマクロについて教えてください マクロを実行すると メッセージボックスが表示されて okをク 4 2023/07/05 19:32
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/21 13:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windows10でコマンドプロンプト...
-
windowsでテキストファイルの各...
-
ExcelのVBAでフォルダ指定がで...
-
Excelのハイパーリンクについて...
-
エクセルのマクロについて教え...
-
フォルダ内のPDFファイル名を変...
-
vbsで選択ダイアログを表示した...
-
[VBS] Unicodeの文字化けを防ぎ...
-
ファイル名と同名のフォルダを...
-
excel VBA Dirにて検索したフォ...
-
同一フォルダ内の別ブックから...
-
Excel VBA で フォルダ名の一部...
-
エクセル VBA ファイルをフォ...
-
VBA フォルダの複数選択ができない
-
【マクロ】ファイル名の日付に...
-
VBScriptでのフォルダ指定ダイ...
-
VBS 途中のパスに変数を入れたい
-
VBA フォルダ名に特定の文字を...
-
保存先のフォルダ名を指定した...
-
パス名に2バイト文字(マルチバ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Windows10でコマンドプロンプト...
-
windowsでテキストファイルの各...
-
VBA 最新のフォルダ取得
-
ファイル名と同名のフォルダを...
-
VBA フォルダ名に特定の文字を...
-
デスクトップの画像をhtmlに表...
-
Excelのハイパーリンクについて...
-
フォルダ内のPDFファイル名を変...
-
Excelで指定したフォルダに保存...
-
会社のネットワーク上のファイ...
-
【マクロ】ファイル名の日付に...
-
保存先のフォルダ名を指定した...
-
多量のファイルをフォルダに自...
-
パス名に2バイト文字(マルチバ...
-
ディレクトリ名変更してコピー...
-
Access VBA で フォルダ権限...
-
C ファイル出力で、フォルダが...
-
サーバ内のフォルダ名と各フォ...
-
フォルダにリンクを貼りたい
-
vbsで選択ダイアログを表示した...
おすすめ情報