(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Excel】全シートをシート毎にCSVファイルに出力するマクロ

スポンサーリンク

はじめに

GUI操作にて「File」→「Export」と進めば以下のようにExcelファイルをCSVファイルに変換できますが
f:id:mtiit:20191206145802p:plain

但し書きとして以下が表示され

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でした。