- ベストアンサー
エクセルの任意のシートをcsv出力するVBScript
c:\a01.xls という名前のエクセルファイルがあり、sheet1、sheet2、sheet3 というシートの構成とします。それぞれのシートには何件かの入力があるとします。 この エクセルファイルから Sheet2 の シートのデータを c:\csv01.csv にCSV出力するには どのような test.vbs を作成したらよいのでしょうか? 教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
一応、作ってみましたが、以下は、自分用に作ったものですから、あえて、 「c:\a01.xls を c:\csv01.csv にする、」 という規則には従いませんでした。もし、必要でしたら、以下のコード直してください。確か、全角空白は、エラーの原因になるという話を聞いたことがありますので、入れていません。 この使い方は、エキスプローラ等から、Excelのファイルをこのファイル(.vbs)にドラッグ&ドロップすると、シート番号を聞いてきますので、入れてください。 ファイル名は、例えば、「c:\a01.xls」でしたら、最初は、「c:\a01.csv」となり、同じものを、ドラッグ&ドロップすると、c:\a011.csv → c:\a012.csv となっていきます。 'ExcelCsvOut.vbs '05/05/04 Dim objFso Dim Fname Dim myBaseName Dim NewMyBaseName Dim myPath Set objFso = CreateObject("Scripting.FileSystemObject") Fname = WScript.Arguments.Item(0) If objFso.GetExtensionName(Fname) <> "xls" Then MsgBox "Excelのファイルではないようです", 64 Wscript.Quit End If ShNum = InputBox ("シート番号","シート番号の入力") If ShNum =0 or ShNum ="" Then Msgbox "入力が間違っています。",16 Wscript.Quit End if ' myPath = objFso.GetParentFolderName(Fname) myBaseName = objFso.GetBaseName(Fname) NewMyBaseName = myBaseName ' Do flg =objFso.FileExists(myPath & "\" & NewMyBaseName & ".csv") If flg = True Then NewMyBaseName = myBaseName & i Else Exit Do End if i = Clng(i) + 1 Loop Set objExcel = Wscript.CreateObject("Excel.Application") On Error Resume Next With objExcel .WorkBooks.Open Fname With .ActiveWorkbook If .Sheets.Count <= Clng(ShNum) Then MsgBox ShNum &" は、シートインデックスには見つかりません。",16 Else .Sheets(Clng(ShNum)).Select .SaveAs NewMyBaseName & ".csv", 6 .Close False End If End wiTh End With If Err.Number = 0 Then MsgBox myPath & NewMyBaseName &".csv" &" を出力しました。" Else MsgBox Err.Description End if Set objExcel = Nothing Set objFso = Nothing
その他の回答 (1)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
const xlCSV = 6 Set objExcel = CreateObject("Excel.Application") objExcel.Visible = false objExcel.Workbooks.Open("c:\a01.xls") objExcel.Sheets("Sheet2").Select objExcel.ActiveWorkbook.SaveAs "c:\csv01.csv", xlCSV objExcel.ActiveWorkbook.Close false objExcel.Workbooks.Close Set objExcel = nothing
お礼
みなさんの 回答を 参考に このような感じで 作成しました。 //////////////////////////////////////////// rem エクセルデータ を CSVで 保存 Dim para Dim xlApp Dim sheet rem パラメータ セット rem 0: エクセルファイル rem 1: 出力シート名 rem 2: 出力ファイル名 Set para = WScript.Arguments Set xlApp = CreateObject( "Excel.Application" ) xlApp.DisplayAlerts = False xlApp.Workbooks.Open ( para.item( 0 ) ) Set sheet = xlApp.ActiveWorkBook.Worksheets( para.item( 1 ) ) rem カンマ区切り 6 タブ 3 sheet.SaveAs para.item( 2 ), 6 xlApp.ActiveWorkBook.Close Set xlApp = Nothing /////////////////////////////////////////////