管理人Kのひとりごと

デジモノレビューやプログラミングや写真など

Excelブックの各シートをCSV出力してみる

Excelブックの各シートをCSV出力することがあったので、楽できないかと思って取り組んだメモ

検証環境

f:id:ksk1130:20190803233113p:plain

コード

個人用マクロブックに標準モジュールとして登録します。

Option Explicit

Sub ワークシートを一括でCSV化()
    Dim savePath As String
    Dim sheetCnt As Integer
    Dim i As Integer
    Dim tmpSheet As Worksheet
    Dim sheetName As String
    
    savePath = 保存フォルダを設定
    
    If savePath = "" Then
        MsgBox "キャンセルされました"
        Exit Sub
    End If

    sheetCnt = ActiveWorkbook.Worksheets.Count

    For i = 1 To sheetCnt
        Set tmpSheet = ActiveWorkbook.Worksheets(i)
        tmpSheet.Activate
        sheetName = tmpSheet.Name
            
        ActiveWorkbook.SaveAs Filename:=savePath & "\" & sheetName & ".csv", _
        FileFormat:=xlCSVUTF8, CreateBackup:=False
   
        Set tmpSheet = Nothing
    Next
       
End Sub

Function 保存フォルダを設定()
    Dim folderDialog As Object
    Dim savePath As String
    
    Set folderDialog = Application.FileDialog(msoFileDialogFolderPicker)
    
    savePath = ""
    If folderDialog.Show Then
        savePath = folderDialog.SelectedItems(1)
        Debug.Print savePath
    Else
        Debug.Print "キャンセルされました"
    End If
    
    Set folderDialog = Nothing
    保存フォルダを設定 = savePath
End Function

実行例

↓こんなブックが
f:id:ksk1130:20190803233116p:plain
↓こんな感じで1シート1CSVになります。(Office2016だとCSVはUTF8BOMありなんですね)
f:id:ksk1130:20190803233121p:plain

補足

「msoFileDialogFolderPicker」が見つからないと言われたら、参照設定を確認。
「Microsoft Office XX(バージョンによって違う) Object Library」
f:id:ksk1130:20190803233107p:plain

参考にしました