シート毎にファイルを自動保存してみる(CSV)
|
|
マクロ / VBA |
CSV?
まずCSVファイルについて説明しておいたほうが良いでしょうか。
CSVとは
データをカンマ(“,”)で区切って並べたファイル形式。主に表計算ソフトやデータベースソフトがデータを保存するときに使う形式だが、汎用性が高く、多くの電子手帳やワープロソフトなどでも利用できるため、異なる種類のアプリケーションソフト間のデータ交換に使われることも多い。実体はテキストファイルであるため、テキストエディタやワープロなどで開いて直接編集することも可能。
(引用:IT用語辞典)
例:テキストファイルで開くと下記のようなデータになります。
123,456,789 987,654,321 |
これをExcelで開くと
123 |
456 |
789 |
|
987 |
654 |
321 |
となります。
ではXLSファイルをCSVファイルに形式を変えて保存するには?
CSV形式で保存
「ファイルを名前を付けて保存」する際にファイル形式をCSVに変更するだけですが、Excelは複数のSheetというものを扱います。CSVはただ単なるカンマ区切りされたデータですので複数Sheetなんてあり得ません。よって、保存しようとすると「選択したファイルの種類は複数のシートを含むブックをサポートしていません。」という忠告メッセージが出ます。そのままOKを押すと選択したSheetのみをCSVファイルとして保存してくれます。
複数あるシートをマクロで自動に・・・
さて本題です。
上記にてXLSのSheetをCSVに保存する事は出来ますが、Sheetが多数あっていちいち名前を付けて保存・・・・が面倒!という時のマクロです。
Sub Save_CSV() Dim ws As Worksheet Dim cvsDir As String Dim csvPrefix As String Dim wsName As String ' このブックのパスを取得 csvPrefix = ThisWorkbook.Path + "\" + ThisWorkbook.Name csvPrefix = Left(csvPrefix, Len(csvPrefix) - 4) ' シートの数だけループを回す For Each ws In ThisWorkbook.Sheets ws.Activate wsName = ws.Name ws.SaveAs Filename:=csvPrefix + "_" + wsName + ".csv", FileFormat:=xlCSV, _ CreateBackup:=False ws.Name = wsName Next End Sub |
XLSファイルは一度保存してからの方が良いでしょう。
XLSファイルが保存されている場所に「(XLSファイル名)_(Sheet名).csv」という名前で保存されます。
2012.03.05修正
一部VBAの変数にタイプミスがありました。
関連記事
- 前の記事
- エクセルでバーコードを作る ~コントロール版~
- 次の記事
- セルにある文字列を分裂させる
Comment
まさに探していた内容なのでありがたく使わせていただきます。
以下の wsNname がミスタイプされています。^^
ws.SaveAs Filename:=csvPrefix + "_" + wsNname + ".csv",
FileFormat:=xlCSV, CreateBackup:=False
お知らせまで。
>mnishi さん
お知らせ有難うございます!
早速修正させて頂きました。
とても魅力的な記事でした!!
また遊びに来ます!!
ありがとうございます。。