いまや多くの業務で当たり前のように使用されるExcelファイルですが、Microsoft 365をインストールしていないと編集できません。
しかし、CSVファイルであればテキストファイルのため環境に依存せず、閲覧や編集ができます。
そのため、CSVファイルで管理している業務が多いのではないでしょうか?
そんなExcelをCSVへ変換する記事を今回ご紹介します。
サンプルコードは、私自身が作成したオリジナルのプログラムです。
分かりやすくするために必要最低限のプログラムのみ書いています。
また、定数は大文字といった皆さん自身のルールがあるかもしれませんがご理解ください。
当記事は、実践編としてVBScriptの基本的な文法がわかる中級者の方にご紹介しています。
基本的な文法がわからない方は、初級編の記事も紹介しているのでそちらを参考にしてください。
ExcelをCSVへ変換する
サンプルコード
'【関数】ExcelをCSVへ変換する
Sub ExcelToCsv(ByVal xlsPath,ByVal outDir)
Const xlReadOnly = True
Const xlCSV = 6
Const xlCreateBackup = False
Const xlAccessMode = 3
'エラーの無視を開始
On Error Resume Next
'アプリ作成
Dim objExlApp : Set objExlApp = CreateObject("Excel.Application")
'非表示
objExlApp.Visible = False
'非通知
objExlApp.DisplayAlerts = False
'画面表示の更新をオフ
objExlApp.ScreenUpdating = False
'Excelを開く
Dim objExlBok : Set objExlBok = objExlApp.Workbooks.Open(xlsPath,,xlReadOnly)
'複数シート読み込み
For Each sheet In objExlBok.Worksheets
'csvファイル名をセット
Dim strCsvPath : strCsvPath = outDir & sheet.Name & ".csv"
'非表示シートは再表示
sheet.Visible = True
'アクティブ化
sheet.Select()
'セル内の改行を半角スペースに置換
sheet.Cells.Replace vbLf, " "
'csv出力
objExlBok.SaveAs strCsvPath,xlCSV,,,,xlCreateBackup,xlAccessMode
Next
'後始末
objExlBok.Close() : Set objExlBok= Nothing
Set objExlApp= Nothing
'エラーの無視を終了
On Error Goto 0
End Sub
'関数を実行
ExcelToCsv "C:\TEST.xlsx" "C:\TEST\"
解説①:引数について
引数1にCSVファイルへ変換したいExcelファイルのフルパスを渡します。
引数2にCSVファイルの出力場所を渡します。
解説②:定数の宣言
Openメソッドの引数の値、SaveAsメソッドの引数の値を定数にしています。
「Const xlCreateBackup = False」を「True」に変更することでSaveAsメソッドの処理時にエラーが発生したときにExcelファイルのバックアップファイルが作成されます。
解説③:Excelシート単位でCSV化する
Excelアプリを開く前に非表示や非通知に設定します。
OpenメソッドでExcelファイルを読み取り専用で開きます。
For文でExcelシートオブジェクトを取得します。
非表示のExcelシートは再表示し、アクティブ化します。
Excelシートのセル内に改行が存在するとCSVファイルへ変換した際に改行されてしまいます。
そのため、改行を半角スペースに置換しています。
改行されて問題無い場合は、「sheet.Cells.Replace vbLf, ” “」の処理をコメントアウトまたは削除してください。
SaveAsメソッドでCSVファイルを出力しています。
上書き保存されるため、同名のファイルがすでに存在する場合は注意してください。