
題名の通りですが、詳しく書くと↓
<やりたいこと>
自ブック(マクロを実行する本体)と同じ場所に複数のサブフォルダがあり、サブフォルダの中にはいくつかの .xlsx ファイルが存在する。
この複数のサブフォルダに存在する .xlsxファイルを全て開きたい。
<今、躓いている所>
サブフォルダ内のファイル名取得(拡張子を指定)のコードをどのように記述するのか
同じフォルダ内の .xlsxファイルを全て開くコードは次のようにしてみました。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Sub SameFolderBook_Open()
Dim FileName As String
Dim wb As Workbook
Dim IsBookOpen As Boolean
Dim myPath As String
myPath = ThisWorkbook.Path & "\" '今開いているブックのパスを取得
FileName = Dir(myPath & "*.xlsx", vbDirectory) 'myPathの*.xlsxのファイル名を取得
Do While FileName <> ""
For Each wb In Workbooks
If wb.Name = FileName Then '既にブックが開いているときの処理
IsBookOpen = True
Exit For
End If
Next wb
If IsBookOpen = False Then 'ブックを開く処理
Application.StatusBar = "データを読込中..."
Application.ScreenUpdating = False
Workbooks.Open myPath & FileName, ReadOnly:=True
ActiveWindow.Visible = False
End If
IsBookOpen = False
FileName = Dir()
Loop
Application.StatusBar = False
Application.ScreenUpdating = True
ThisWorkbook.Activate
End Sub
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サブフォルダ取得なので、Dir()かFSOを使ったコードになるとは思うのですが、コードが思い浮かばず・・・
可能ならば、上記のコードも活かしたい。
No.1ベストアンサー
- 回答日時:
こんにちは。
>サブフォルダ内のファイル名取得(拡張子を指定)のコードをどのように記述するのか
雑な書き方で、質問者さんのコードを汚してしまいましたが、こんな感じでループすればどうでしょうか。
たぶん、時間をかければ、私の書いた程度なら書けたはずだと思います。
ファイル名取得なら、
Dir(myPath & "*.xlsx", vbNormal) か、ただの Dir(myPath & "*.xlsx")で良いはずです。
ひとつだけ気になるのは、
ActiveWindow.Visible = False
の部分ですが、後、どうやって収拾するのでしょうか?
'//
Sub SameFolderBook_OpenN()
'No. 9037311
Dim FileName As String
Dim wb As Workbook
Dim IsBookOpen As Boolean
Dim myPath As String
Dim FolderLists As Variant
Dim FSO As Object
Dim objFolder As Object
Dim i As Long
Dim obj As Object
Dim pt As Variant
Dim buf As String
myPath = ThisWorkbook.Path & "\" '今開いているブックのパスを取得
ReDim FolderLists(0)
FolderLists(0) = myPath
i = i + 1
Set FSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = FSO.GetFolder(myPath)
For Each obj In objFolder.SubFolders
ReDim Preserve FolderLists(i)
If Right$(myPath & obj.Name, 1) <> "\" Then
FolderLists(i) = myPath & obj.Name & "\"
Else
FolderLists(i) = myPath & obj.Name
End If
i = i + 1
Next
For Each pt In FolderLists
FileName = Dir(pt & "*.xlsx",vbNormal) 'myPathの*.xlsxのファイル名を取得
Do While FileName <> ""
For Each wb In Workbooks
If wb.Name = FileName Then '既にブックが開いているときの処理
IsBookOpen = True
Exit For
End If
Next wb
If IsBookOpen = False Then 'ブックを開く処理
Application.StatusBar = "データを読込中..."
Application.ScreenUpdating = False
Workbooks.Open pt & FileName, ReadOnly:=True
ActiveWindow.Visible = False
End If
IsBookOpen = False
FileName = Dir()
Loop
Next pt
Application.StatusBar = False
Application.ScreenUpdating = True
ThisWorkbook.Activate
End Sub
'///
教えて頂いたコードでうまく動作しました。
開くファイルの数が多い(72個)のか、メモリ不足表示が出ました。メモリ自体は8GBなんですが・・・(苦笑
>ひとつだけ気になるのは、
> ActiveWindow.Visible = False
> の部分ですが、後、どうやって収拾するのでしょうか?
すいません、説明なく入れていました。
自ブックにINDIRECT関数でデータ値を外部参照させている部分があり、データ値のブックは操作する人に見えなくてもよいという理由からです。
課題は解決したので、No.1をベストアンサーに選ばせていただきます。
ありがとうございました。また別の機会によろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/06 13:01
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) エクセルのマクロについて教えてください 物件ごとのフォルダを作成してます そのフォルダ内にサブフォル 2 2023/07/02 17:58
- Visual Basic(VBA) InputBoxでキャンセルボタンを押したらファイル自体を閉じたい 3 2022/07/23 17:52
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAの参照先のファイル名をセル...
-
別ブックをダイアログボックス...
-
【Excel VBA】書き込み先ブック...
-
フォルダ内の全てのファイルに...
-
VBS Bookを閉じるコード
-
エクセルのマクロを使ってメー...
-
ADOで複数のBookから抽出
-
エクセル VBA 他シートの行を選...
-
マクロのBeforeCloseイベントに...
-
EXCEL VBA 単語置き換え につい...
-
【マクロ】コピーでは、ブック...
-
マクロで最終行を取得したい
-
Excelマクロ 該当する値の行番...
-
Excelのマクロコードについて教...
-
マクロを使って不特定のファイ...
-
Excel2013 ウインドウサイズの固定
-
VBで既存エクセルシートを新規...
-
VBAで別のブックにシートをコピ...
-
「段」と「行」の違いがよくわ...
-
エクセルで離れた列を選択して...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
VBA 別ブックからコピペしたい...
-
別ブックをダイアログボックス...
-
エクセルVBAが途中で止まります
-
ワイルドカード「*」を使うとう...
-
【Excel VBA】書き込み先ブック...
-
VBAで別ブックのシートを指定し...
-
【ExcelVBA】zip圧縮されたCSV...
-
VBAで別のブックにシートをコピ...
-
VBA コードを実行すると画面が...
-
Excel2007VBAファイルの表示に...
-
VBAで複数のブックを開かずに処...
-
[Excel]ADODBでNull変換されて...
-
Excelファイルを開くとき、読み...
-
VBA 実行時エラー 2147024893
-
Excelマクロ 該当する値の行番...
-
Excel にて、 リストボックスの...
-
VBS Bookを閉じるコード
-
複数のエクセルファイルとシー...
-
【ExcelVBA】インデックスが有...
おすすめ情報