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の変数にタイプミスがありました。