エクセル術

シート毎にファイルを自動保存してみる(CSV)

CSV?

まずCSVファイルについて説明しておいたほうが良いでしょうか。
CSVとは
 データをカンマ(“,”)で区切って並べたファイル形式。主に表計算ソフトやデータベースソフトがデータを保存するときに使う形式だが、汎用性が高く、多くの電子手帳やワープロソフトなどでも利用できるため、異なる種類のアプリケーションソフト間のデータ交換に使われることも多い。実体はテキストファイルであるため、テキストエディタやワープロなどで開いて直接編集することも可能。
(引用:IT用語辞典)
例:テキストファイルで開くと下記のようなデータになります。

123,456,789
987,654,321

これをExcelで開くと

A
B
C
1
123
456
789
2
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の変数にタイプミスがありました。

モバイルバージョンを終了