🐏

カレントディレクトリのXLSファイルを全部CSVファイルに変換する

2022/07/01に公開

はじめに

大量のExcelファイル(*.xls)をCSV形式に変換してくれと言われたので、VBScriptでインチキした。

なぜ今更CSVなのかは聞いてくれるな

コード

カレントディレクトリのExcelファイル(*.xls, *.xlsx)らしきものをCSVに変換しようと試みるやつ

xls2csv.vbs
Option Explicit

Dim objFS, objFolder, objFile, strExt
Dim objExcel

Set objFS     = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFS.GetFolder(".")
Set objExcel  = CreateObject("Excel.Application")

For Each objFile In objFolder.Files
    strExt = objFS.GetExtensionName(objFile.Name)
    If strExt="xls" OR strExt="xlsx" Then
        Dim inputFileName
        inputFileName = objFS.BuildPath(objFolder,objFile.Name)
        ExcelToCsv objExcel, inputFileName
    End If
Next

Set objFS = Nothing
objExcel.Quit
Set objExcel = Nothing

MsgBox "Done."


Sub ExcelToCsv(objExcel, inputFileName)
    Dim xlSheet
    Dim outputFileName
    outputFileName = Left(inputFileName, Len(inputFileName)- (Len(strExt) + 1)) & ".csv"
    
    objExcel.DisplayAlerts = False
    objExcel.Workbooks.Open(inputFileName)
    Set xlSheet = objExcel.Worksheets(1)

    xlSheet.SaveAs outputFileName, 6
    objExcel.Workbooks.Close
End Sub

仕様上、1枚目のシートしか出力しないようになっている。
複数シートがあって、個別に出力したい場合はさらにExcelToCsvサブルーチン中でループを回す必要がある
xlSheet.SaveAsの第2引数を変えればCSVファイル以外にも変換できそう → 参考

Discussion