こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

vbs xlsをcsvに変換

vbsでxlsファイルをcsvファイルに変換することは可能でしょうか。
手動で拡張子をcsvにすると、カンマ区切りではないため
一列目にすべての値がスペース区切りで出力されてしまいます。

vbsで実行可能でしたらコードのご教示頂けますでしょうか。

投稿日時 - 2018-10-30 21:52:31

QNo.9552970

すぐに回答ほしいです

質問者が選んだベストアンサー

プログラムファイル(「~.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!」と表示しています。

投稿日時 - 2018-10-31 14:12:21

お礼

ご丁寧に説明までありがとうございます。
他の皆様もありがとうございました。

投稿日時 - 2018-10-31 20:21:09

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.4

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 "終わりました。"

投稿日時 - 2018-10-31 11:08:50

ANo.3

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

投稿日時 - 2018-10-31 10:03:50

ANo.2

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

投稿日時 - 2018-10-30 22:36:25

補足

ご回答ありがとうございます。
D&Dで実行する場合のコードをご教示頂けますでしょうか。
お手数をおかけします。

投稿日時 - 2018-10-30 22:44:27

ANo.1

Excelから[CSV(カンマ区切り]で保存するとカンマ区切りで保存されますよ。
[ファイル]⇒[名前を付けて保存]⇒保存先を選択後⇒[ファイルの種類(T)]⇒
[CSV(カンマ区切り)(*.csv)]⇒[保存]⇒[OK]

投稿日時 - 2018-10-30 22:15:57

補足

手動でもできるんですね。
ありがとうございます。
ちなみに、vbsでも可能でしょうか?

投稿日時 - 2018-10-30 22:27:53

あなたにオススメの質問