[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『複数ファイルのシートをCSV形式で保存』(えま)
現在、
1.一つのファイルの偶数シート(10枚)のデータにフィルタをかけ、
コピーし、新しいファイル10枚それぞれに、値の貼り付けする。
2.保存先のフォルダを"C:\"に変更し、
1.で作成した10枚の新しいファイルそれぞれを"C:\&セルA1の名前&今日の日付&.@@@" CSV形式で保存する
というマクロを作っています。
このマクロを一つのフォルダの中の複数のファイルに対して行いたいのですが、
2点、行き詰っています。
・上記の2.10枚の新しいファイルそれぞれの保存の仕方がわかりません。
下のマクロを実行すると、10枚の新しいファイルができ、保存できるのは
アクティブワークブックのみです。(そう書いたからなのですが…)
・複数のファイルに対して行う方法がわかりません。
複数のファイルのデータを一つにまとめる方法はMookさんに教えていただいたの
ですが、一つのファイルではなく、それぞれのファイルに保存するところで
躓いています。
ベースはMookさんに教えていただいたものです。
[[20120430221755]]
Sub CSVファイル保存() Dim wb As Workbook Set wb = ThisWorkbook Dim ws As Worksheet
Dim i As Long For i = 2 To wb.Worksheets.Count Step 2 Set ws = wb.Worksheets(i) With ws .Range("O4").AutoFilter Field:=15, Criteria1:="3" .Range("B4:Q39").SpecialCells(xlCellTypeVisible).Copy Workbooks.Add Selection.PasteSpecial Paste:=xlValues Application.CutCopyMode = False End With Next wb.Close False
ChDir "C:\" If Dir$("C:\@@@", vbDirectory) = vbNullString Then MkDir "C:\@@@" End If
ActiveWorkbook.SaveAs Filename:="C:\QAP\" & Range("A1") & "_" & Format(Now, "yyyymmdd") & ".***", FileFormat:=xlCSV, _ CreateBackup:=False ActiveWindow.Close False
End Sub
どうぞ、よろしくお願いします。
Excel2007
WindowsXP
質問で提示されている現在のマクロの流れは理解できているでしょうか。 ループ処理が何をしているか ワークブックを作る 名前を付けて保存する を理解すれば、どこが問題かがわかると思います。
For i = 2 To wb.Worksheets.Count Step 2 Set ws = wb.Worksheets(i) With ws .Range("O4").AutoFilter Field:=15, Criteria1:="3" .Range("B4:Q39").SpecialCells(xlCellTypeVisible).Copy Workbooks.Add '★新規ブックの作成 Selection.PasteSpecial Paste:=xlValues Application.CutCopyMode = False ' ★のブックをここで保存が必要 ' ★のブックを閉じる処理もここでやった方がよい End With Next wb.Close False '// 処理をしているマクロのブックを閉じたい? 閉じたら以降の処理がされないのでは?
フォルダに関しては、 以下は先頭の処理をFor文の前でやっておけばよいと思います。 If Dir$("C:\@@@", vbDirectory) = vbNullString Then MkDir "C:\@@@" End If
ファイル保存は下の処理を、★の部分に書けばよいように見えます。 ActiveWorkbook.SaveAs Filename:="C:\QAP\" & Range("A1") & "_" & Format(Now, "yyyymmdd") & ".***", FileFormat:=xlCSV, _ CreateBackup:=False ActiveWindow.Close False
ここの Range がシートやブックの指定が無いので、そこだけ意図したものが使われる よう、 確認した方がよいと思います。
フォルダの中やシートを見ながらステップ実行してみれば、書いたコードが期待通りに 動いているか確認できるでしょう。 (Mook)
上に書いた一つ一つの処理は理解して書いたつもりだったのですが、
wb.Close False '// 処理をしているマクロのブックを閉じたい? 閉じたら以降の処理がされないのでは?
自分でもなぜここに入れたのか…
書いている間は確信を持っていたはずで、End Subまで来たときは、よくやった!
と自分で褒めていたのですが。(しょんぼり)
Mookさんのアドバイスに従って、以下のように書き換えました。
一つのファイルの複数のシートをCSV形式のファイルに変更し、
該当のフォルダに保存することができました。
これを一つのフォルダ内の複数のファイルに対して実行したいのです。
自分なりにフォルダ操作についてもいろいろ調べたのですが、結局Mookさんに教えていただいた
「まとめシートの作成」がわかりやすく、1行ごとに理解した上でアレンジしたかったのですが、
まとめシートを1枚作る
Workbooks.Add '★新規ブックの作成
この違いをどうすればいいのかわかりませんでした。
飲み込みが遅くて申し訳ないのですが、
フォルダの中の複数ファイルに対して実行するのにはどうすればいいのか教えていただけないでしょうか。
よろしくお願いします。
(えま)
Sub CSVファイル保存()
Dim wb As Workbook Set wb = ThisWorkbook Dim ws As Worksheet
ChDir "C:\" If Dir$("C:\@@@", vbDirectory) = vbNullString Then MkDir "C:\@@@" End If
Dim i As Long For i = 2 To wb.Worksheets.Count Step 2 Set ws = wb.Worksheets(i) With ws .Range("O4").AutoFilter Field:=15, Criteria1:="3" .Range("B4:Q39").SpecialCells(xlCellTypeVisible).Copy Workbooks.Add Selection.PasteSpecial Paste:=xlValues Application.CutCopyMode = False ActiveWorkbook.SaveAs Filename:="C:\@@@\" & Range("A1") & "_" & Format(Now, "yyyymmdd") & ".***", FileFormat:=xlCSV, _ CreateBackup:=False ActiveWindow.Close False End With Next wb.Close False End Sub
上のコードで一つのファイルに関しては処理できていると思いますが、問題はありますか?
ただ、上のコードはマクロを実行したファイルのシートを処理するようにしていますが、 複数ファイルを処理するのであれば、マクロを実行するファイルではファイルを指定して、 指定したファイルを処理するように作りかえないと複数ファイルの処理はできません。 一応サンプルです。 (Mook)
Sub 複数ファイル処理() Dim fso Set fso = CreateObject("Scripting.FileSystemObject")
If Dir$("C:\@@@", vbDirectory) = vbNullString Then '★ ここに移動 MkDir "C:\@@@" End If
For Each file In fso.GetFolder( "処理したい EXCEL ファイルがあるパス" ).Files CSVファイル保存 file.Path Next End Sub
Sub CSVファイル保存( filePath ) '★ ここを変更 Dim wb As Workbook Set wb = Workbooks.Open( filePath ) '★ ここを変更 Dim ws As Worksheet
Dim i As Long For i = 2 To wb.Worksheets.Count Step 2 Set ws = wb.Worksheets(i) With ws .Range("O4").AutoFilter Field:=15, Criteria1:="3" .Range("B4:Q39").SpecialCells(xlCellTypeVisible).Copy Workbooks.Add Selection.PasteSpecial Paste:=xlValues Application.CutCopyMode = False ActiveWorkbook.SaveAs Filename:="C:\@@@\" & Range("A1") & "_" & Format(Now, "yyyymmdd") & ".***", FileFormat:=xlCSV, _ CreateBackup:=False ActiveWindow.Close False End With Next wb.Close False End Sub
というか、途中まで指定のフォルダに指定の形式でできるのですが、30ファイルぐらいの
ところで止まってしまいます。B4に参照式が入っているからかと、
全てのセルを値の貼り付けにしてからオートフィルタ以降の処理をしたのですが、
やっぱり30ファイルあたりで止まります。
今からデバックトレースをやってみます。
(えま)
マクロを知らないまま今後も手作業を続けていたらと思うと、ちょっと怖いです。
まだ他にも手作業を繰り返す、という内容の業務がいくつかあり、
その作業にもマクロを取り入れようと思います。
Mookさんには本当にお世話になりました。
本当に本当にありがとうございました。
まだまだ基礎がおぼつかないので勉強を続けていくつもりです。
今後とも、どうぞよろしくお願いします。
(えま)
無事に、解決できたようでよかったです。 問題をご自身の力で解決できたのが、何よりも良かったと思います。 本にもネットにも、参考になる例がたくさんあると思いますので、少しずつ身に付けて いろいろなやり方を覚えれば、きっともっとマクロが楽しくなると思います。 頑張ってください。 (Mook)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.