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

マクロ / VBA

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」という名前で保存されます。
19-1.jpg
2012.03.05修正
 一部VBAの変数にタイプミスがありました。

Comment

  1. mnishi より:

    まさに探していた内容なのでありがたく使わせていただきます。
    以下の wsNname がミスタイプされています。^^
    ws.SaveAs Filename:=csvPrefix + "_" + wsNname + ".csv",
    FileFormat:=xlCSV, CreateBackup:=False
    お知らせまで。

  2. isakat より:

    >mnishi さん
    お知らせ有難うございます!
    早速修正させて頂きました。

  3. 株初心者 より:

    とても魅力的な記事でした!!
    また遊びに来ます!!
    ありがとうございます。。

コメントをどうぞ

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

  • ▼お小遣い稼ぎしませんか?▼ 日々の生活にhappyをプラスする|ハピタス

    クレジットカード・FX口座を作るだけで簡単に3万円GETです。一切支出はありません。

NA() MATCH XLSTART バーコード INDEX 図形 条件付き書式 作業効率UP 置換 テンプレート 印刷 無料 ワイルドカード SUMIF DATE フロー図 COUNTIF 検索 COLUMN SUM 変換 TODAY コピペ 日付 目標 ユーザー定義関数 VLOOKUP SUMIFS HLOOKUP グラフ
  • 関西在住の30代サラリーマン。事務職で毎日Excelと戯れています。
    システム導入なんて資金が無い!Excelでなんとかやりたい零細中小の社長さん・事務員さんの力になればと思います。
    詳しいプロフィール


PAGE TOP ↑