- ベストアンサー
vbs xlsをcsvに変換
vbsでxlsファイルをcsvファイルに変換することは可能でしょうか。 手動で拡張子をcsvにすると、カンマ区切りではないため 一列目にすべての値がスペース区切りで出力されてしまいます。 vbsで実行可能でしたらコードのご教示頂けますでしょうか。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
プログラムファイル(「~.vbs」ファイル)が存在するフォルダ内のすべての「~.xls」ファイルのアクティブシートを、同じフォルダ、同じファイル名(「abc.xls」→「abc.csv」)に変換します。 Option Explicit Dim bk, ex, f, gf, so Set so = CreateObject("Scripting.FileSystemObject") Set gf = so.GetFolder(so.GetParentFolderName(WScript.ScriptFullName)) Set ex = CreateObject("Excel.Application") ex.Application.DisplayAlerts = False ex.Visible = False For Each f In gf.Files If LCase(so.GetExtensionName(f.Name)) = "xls" Then Set bk = ex.Workbooks.Open(gf & "\" & f.Name) bk.SaveAs gf & "\" & so.GetBaseName(f.Name) & ".csv", 6 bk.Close Set bk = Nothing End If Next ex.Quit Set ex = Nothing Set gf = Nothing Set so = Nothing MsgBox("Finished!") 簡単な説明です。 Option Explicit 「厳密に」というような意味で、このオプションを設定すると、変数は、その使用の前に、必ず、「Dim」等によって宣言しておかなければなりません。 Set so = CreateObject("Scripting.FileSystemObject") ファイルやフォルダを扱えるようにしています。 Set gf = so.GetFolder(so.GetParentFolderName(WScript.ScriptFullName)) プログラムファイルの存在するフォルダ、すなわち「~.xls」ファイル群が存在するフォルダを取得しています。 Set ex = CreateObject("Excel.Application") エクセルを扱えるようにしています。 ex.Application.DisplayAlerts = False ex.Visible = False 「上書きしますか?」などと聞いてこないように、また、エクセルを表示しません。 For Each f In gf.Files プログラムファイルが存在するフォルダ内のすべてのファイルを1つずつ処理。 If LCase(so.GetExtensionName(f.Name)) = "xls" Then 見つかったファイルの拡張子が「xls」なら、 Set bk = ex.Workbooks.Open(gf & "\" & f.Name) エクセルのブックとして開いています。 bk.SaveAs gf & "\" & so.GetBaseName(f.Name) & ".csv", 6 「csv」で保存しています(最後の「6」は「xlCsv」)。 bk.Close Set bk = Nothing 閉じています。 End If Next を、すべてのファイルで繰り返しています。 ex.Quit Set ex = Nothing エクセルそのものを終了しています。 Set gf = Nothing Set so = Nothing MsgBox("Finished!") あとは、終了処理で、最後に「Finished!」と表示しています。
その他の回答 (4)
- watabe007
- ベストアンサー率62% (476/760)
ExcelファイルをD&Dすることで当VBSが置かれている場所に csvファイルを出力します。 Option Explicit Dim objArgs, objFSO, objExcel, Book Dim Arg, FilePath, SavePath Dim myBook, bookName, extName Set objArgs = WScript.Arguments Set objFSO = CreateObject("Scripting.FileSystemObject") If objArgs.Count < 1 Then WScript.Quit SavePath = objFSO.GetParentFolderName(WScript.ScriptFullName) Set objExcel = CreateObject("Excel.Application") For Each Arg In objArgs FilePath = Arg extName = objFSO.GetExtensionName(FilePath) If LCase(Left(extName, 3)) <> "xls" Then MsgBox objFSO.GetFileName(FilePath) & vbCr & "Excelファイル以外をD&Dしました。", 48 Exit For End If bookName = objFSO.GetBaseName(FilePath) extName = objFSO.GetExtensionName(FilePath) With objExcel Set myBook = .Application.Workbooks.Open(FilePath) 'データが有ると思われる1ページをアクティブに myBook.WorkSheets(1).Activate myBook.SaveAs SavePath & "\" & bookName & ".csv", 6 myBook.Close False .Quit End With Next Set objFSO = Nothing Set objExcel = Nothing MsgBox "終わりました。"
- HohoPapa
- ベストアンサー率65% (455/693)
notnotさんのコードを生かして、次のようなコードでいかがでしょうか Dim so, wa, ff,ft Set so = CreateObject("Scripting.FileSystemObject") Set wa = WScript.Arguments Set EXCEL = CreateObject("Excel.Application") ff = wa(0) Set wa = Nothing Set so = Nothing ft = Replace(ff, ".xlsx", ".csv") ft = Replace(ft, ".xls", ".csv") EXCEL.Application.Visible = true Set Book = EXCEL.Application.Workbooks.Open(ff) Book.SaveAs ft, 6 Book.Close False EXCEL.Quit Set EXCEL = Nothing
- notnot
- ベストアンサー率47% (4900/10358)
Set EXCEL = CreateObject("Excel.Application") EXCEL.Application.Visible = true Set Book = EXCEL.Application.Workbooks.Open("D:\Temp\Book1.xls") Book.SaveAs "D:\Temp\Books2.csv", 6 Book.Close False EXCEL.Quit Set EXCEL = Nothing
補足
ご回答ありがとうございます。 D&Dで実行する場合のコードをご教示頂けますでしょうか。 お手数をおかけします。
- watabe007
- ベストアンサー率62% (476/760)
お礼
ご丁寧に説明までありがとうございます。 他の皆様もありがとうございました。