[[20201111101025]] 『2階層下のフォルダ内にあるエクセルシートを取り潤x(ねこ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『2階層下のフォルダ内にあるエクセルシートを取り出したい』(ねこ)

VBA初心者です。
大量にあるフォルダ内に格納されているエクセルシートを
どこか1つのフォルダにまとめて取り出したくVBA活用を検討しています。
ワードを変えていろいろ検索してみるものの
同階層のフォルダや1階層下のフォルダのデータ抽出方法についての
コードを確認することはできるのですが
2階層下のファイルを抽出するコードを検索することができず
ご質問しました次第です。

【まとめ】というフォルダにフォルダが約200個
そのフォルダ内に2〜3個のフォルダがありそれぞれにエクセルシートが複数個入っている状況です。

よろしくお願いいたします。

< 使用 Excel:Office365、使用 OS:Windows10 >


 file system object を使ってみては?
http://officetanaka.net/excel/vba/filesystemobject/
http://officetanaka.net/excel/vba/filesystemobject/folder14.htm

 Sub test51()
     Dim FSO As Object
     Dim fld1 As Object
     Dim fld2 As Object
     Dim f As Object

     Set FSO = CreateObject("Scripting.FileSystemObject")

     For Each fld1 In FSO.GetFolder("D:\AAA\BBB").SubFolders '適宜変更のこと
         For Each fld2 In fld1.SubFolders
             For Each f In fld2.Files
                 Debug.Print f.Name; Tab(20); f.Path     '作業例
             Next
         Next
     Next
     Set FSO = Nothing
 End Sub
(γ) 2020/11/11(水) 10:45

 EXCEL の学校ですが、PowerShell であれば、PowerShell ウィンドウを開いて
 >Get-ChildItem "D:\AAA\BBB\*\*.xls*"
 だけで取得できます。

 ファイル名だけ表示したい場合は
 >Get-ChildItem "D:\AAA\BBB\*\*.xls*" | Select Name

 古パスで表示したい場合は
 >Get-ChildItem "D:\AAA\BBB\*\*.xls*" | Select FullName

 で。
 結果をファイルに出力したい場合は
 >Get-ChildItem "D:\AAA\BBB\*\*.xls*" | Select FullName | Out-File "D:\ExcelList.txt"
 でも。

(QS) 2020/11/11(水) 10:55


 >大量にあるフォルダ内に格納されているエクセルシートを
 作業内容自体をよく読んでいなかったが、
 まず、シートはブックの要素です。
 書くなら、格納されているエクセルブックを、でしょうか。

 (1)Excelファイルだけに限定する必要がある場合
 ファイルのパス名から拡張子だけを取り出すには、
 GetExtensionNameを使います。それで判定可能なはず。
http://officetanaka.net/excel/vba/filesystemobject/filesystemobject16.htm

 (2)
 どこかひとつのフォルダにファイルをコピーしたいのですか?
 それなら、
http://officetanaka.net/excel/vba/filesystemobject/file13.htm
 を参考に、特定フォルダにコピーできます。

(γ) 2020/11/11(水) 11:11


 あっ、まったく質問読んでませんでした。
 先の回答は無視してください。
(QS) 2020/11/11(水) 11:28

γさん
ご返信ありがとうございます。
お伝えの仕方が悪く申し訳ありません。
おっしゃる通り、各フォルダ内に格納されているブックを
別のフォルダにまとめたいということです。(コピーでも移動でもどちらでもよい)
頂いたURLを確認しましたが理解が難しく時間がかかりそうなのでお礼まで。。

QSさん
ご返信ありがとうございます。
いえ、私のお伝えの仕方が悪かったと思います、すみません。。
(ねこ) 2020/11/11(水) 11:51


 コピーであれば、ファイル名の重複がない前提で

 >Copy-Item D:\A\*\*.xls* -Destination D:\B\
 でもできます。

 \*\ と間に挟むことで、二階層下のフォルダを意味します。
 でもまぁ、まったく EXCEL と関係ない回答ですみません。
(QS) 2020/11/11(水) 13:00

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.