- ベストアンサー
同じ場所にあるファイル全てに対してマクロをかける方法は?
- フォルダ内の全ファイルに対してマクロを実行する方法が知りたいです。
- 複数のファイルを開く手間なく、一括で処理するマクロの書き方を教えてください。
- マクロを使って、ファイルを開くことなくフォルダ内のすべてのファイルに処理をかけたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
sub macro1() dim myPath as string dim myFile as string dim w as workbook dim s as worksheet mypath = thisworkbook.path & "\" myfile = dir(mypath & "*.xls") do until myfile = "" if myfile <> thisworkbook.name then set w = workbooks.open(mypath & myfile) for each s in w.worksheets s.autofiltermode = false s.range("1:2").delete shift:=xlshiftup s.range("A1") = "No1" next w.close savechanges:=true end if myfile = dir() loop end sub といった具合に。
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
Sub test02() Application.ScreenUpdating = False flg = Array("3.xls", "01XX.xls", "2日.xls", _ "2段リスト.xls", "bbb.xls") For i = 0 To UBound(flg) Workbooks.Open flg(i) MsgBox flg(i) Application.DisplayAlerts = False ActiveWorkbook.Close Next i Application.ScreenUpdating = False End Sub を参考にして、MsgBox flg(i)のところに処理を入れてはどうだろう。 配列は20ファイルぐらいまで課と思う。その良いところはArrayに記述順序で開かれる。 セルの1つの空き列に記述しても良い。 ーー もうひとつ Sub test01() Set objfs = CreateObject("scripting.filesystemobject") d = CurDir() MsgBox d flg = Array("3.xls", "01化.xls", "2日.xls", _ "2段リスト.xls", "bbb.xls") Set fld = objfs.getfolder(d) For Each fl In fld.Files For i = 1 To UBound(flg) If fl.Name = flg(i) Then MsgBox fl.Name End If Next i Next End Sub なども考えられる、かもしれないが、フォルダのすべてや、少数例外以外のファイルを処理するときは良いが、その存在を確認後やはりブックを開かないといけないのであまりメリットが無いかもしれない。 。 >(4ファイル開いておけば なぜ4つのブックを開いておく必要があるのか良くわからない(質問での説明不足) 1つづつ、開いて処理、閉じるのくり返しではないのですか。 >オートフィルタを消し 突然出てきて何のことか判らない。 全般に、ポイントの押さえどころがあいまいで、まだVBAの経験も少ない(マクロの記録程度?)のに、難しいことをやりすぎの感あり。 ーー 「マクロをかける」と言う表現はしない。 ーー 処理する内容が、質問文に時系列的に説明されていない。コードを載せるより、手作業でやるとした場合の処理順序を明確に説明する訓練をしたほうが、今後役立つ。
お礼
ありがとうございます。 素人で、説明が下手で申し訳ありませんでした。
お礼
何度もご丁寧にありがとうございました。 keithinさんにお答えいただけたらと思ってこちらに捕捉(継続)で質問をさせて いただきましたが、ちょっと時間がなかったので新たに質問をたちあげさせて いただきました。すいません。 本当にありがとうございます!
補足
できました!ありがとうございます。 ちなみに、ファイル名を変更して保存することは可能でしょうか。 処理前のファイル:AAA.xls 処理後のファイル:○AAA.xls としたいです。