はじめに
GUI操作にて「File」→「Export」と進めば以下のようにExcelファイルをCSVファイルに変換できますが
但し書きとして以下が表示され
The selected file type doesnot support workbooks that contail multiple sheets.
- To save only the active sheet, click OK.
- To save all sheets, save them individually using a different file name for each, or choose a file type supports multiple sheets
このままだと現在選択しているシートしかCSVにはなりません。
本記事では一括でCSVファイルを作成するマクロの紹介します。
実装方針
ブックに名前を付けて保存する際に利用するSaveAsメソッドを全シートで行います。
今回必要な引数は
- FileName
- FileFormat
のみですが、FileNameに関してはシート名をそのまま持ってくることします。
引数によってはPasswordやCreateBackup等もありますが利用しません。メソッドの詳細は公式ページを確認ください。
VBAコード
Sub exportcsv() Application.ScreenUpdating = False Dim BookName As String BookName = Application.GetOpenFilename(FileFilter:="Microsoft Excelブック,*.xls*") If BookName <> "False" Then Workbooks.Open FileName:=BookName Else Exit Sub End If Dim ws As Worksheet For Each ws In Worksheets ws.Activate ActiveWorkbook.SaveAs FileName:=ActiveWorkbook.Path & "\" & ws.Name & ".csv", FileFormat:=xlCSV Next ws ActiveWorkbook.Close SaveChanges:=False MsgBox "Successful" End Sub
上記をマクロとして実行し、該当のExcelファイルを選択すればシート名が出力されるcsvに投下されます。
Excelのシートの中に改行が含まれている場合の挙動は事前に把握しておくことをおすすめします。
終わりに
Excelをシート内で扱うのではなく、CSVとして出力してテキスト処理にかけたいケースがあるかと思います。
その際に利用できるVBAでした。