• ベストアンサー

エクセルの任意のシートをcsv出力するVBScript

c:\a01.xls という名前のエクセルファイルがあり、sheet1、sheet2、sheet3 というシートの構成とします。それぞれのシートには何件かの入力があるとします。 この エクセルファイルから Sheet2 の シートのデータを c:\csv01.csv にCSV出力するには どのような test.vbs を作成したらよいのでしょうか? 教えてください。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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

marumfcvc6
質問者

お礼

 みなさんの 回答を 参考に  このような感じで 作成しました。 //////////////////////////////////////////// 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 /////////////////////////////////////////////

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBSで複数のCSVファイルを新しいXLSファイルの各シートに格納したい

    自分にVBSの知識がない上にかなり時間がありませんので丸投げの形になってしまいますが、どうかよろしくお願いいたします。 やりたいことは以下の通りです。 (Excel非表示) (1)CSVファイルtest01.csv~test10.csvを引数から取得 (2)各CSVごとにCSV名のシートを作成し、それぞれのシートに各CSVを格納 (3)新しいXLSファイルtest.xlsに保存 以上です。 どうかよろしくお願いいたします。

  • EXCELからCSVファイルの出力方法について

    EXCELについて質問です。 エクセルのシートに入力した内容をCSVファイルで出力したいです。 当方の希望としまして、いくつかあるシートの中で、希望のシートだけCSVファイルを出力し、出力する際は「CSVファイルを出力」のようなボタンをクリックすれば、CSVファイルが出力されるものです。 初心者ですので、できるだけ詳しく教えて頂きたいです。

  • Excelのcsv保存について

    別ブックのデータを参照して、csvで保存するためのブックを作ったのですが、参照のための関数が入力されているセルもcsvにnullで出力されてしまいます。 参照元.xls  A B C D E 1 あ い う え お 2 か き く け こ 3 さ し す せ そ 4 5 csv出力用.xls A1~E5には作業の都合上、 =IF([参照元.xls]Sheet1!A1="","",[参照元.xls]Sheet1!A1) のような関数を入れて参照しています。  A B C D E 1 あ い う え お 2 か き く け こ 3 さ し す せ そ 4 5 これをcsvで保存すると、 あ,い,う,え,お か,き,く,け,こ さ,し,す,せ,そ ,,,, ,,,, と、データは未入力だけど関数が入っている部分まで保存されてしまいます。 これを、 あ,い,う,え,お か,き,く,け,こ さ,し,す,せ,そ ここまでで保存できるような方法、 もしくは関数などはありませんでしょうか。 csv出力用のブックでは一括半角置換や全角置換、 誤入力されたハイフンやスペースの削除などをおこなっているので、 できればこの参照形式は崩したくありません。 わかるかたいらっしゃいましたらアドバイスをお願いします。

  • エクセルからCSVで「”、”」の形式のメモ帳で開けれるようにしたいのですが

    「Workbooksクラスの_Openメソッドが失敗しました」と、、出てできません。恐れ入りますが、どなたかご教授願います。 やった手順は 1.エクセルシート(IDや00を含まないシンプルな名簿)を準備 2.CSVを起動させて入力ファイルには、1のエクセルシート指定して  「~~~.xls」または「~~~.csv」でボタンを押して、 3.出力ファイルでは、同じエクセルシートを指定して「~~~.csv」   だけにしてボタンを押したら 上のような失敗ですと2回ともなって、全く困っています・・・ 助けてください、どうかよろしくお願いします。

  • エクセルでcsvデータを自動読み込みする方法(至急)

    csv形式のファイル(内容は計測値データ)をエクセルに読み込み、csvファイルの各データが規定値内に納まっているかの確認が容易できる方法を探しています。 このとき条件として、 (1)csvファイル内のデータは10項目程度。 (2)csvデータはランダムに更新される。 (3)エクセルに読み込むときはエクセルシート内の決められたセルにそれぞれデータが格納されること。 (例)csvファイルに"110"と"119"の2種類のデータがあった場合、あらかじめxlsファイルのセルA1に「警察」、セルA2に「消防署」と記入しておき、csvファイルのデータを読み込んだとき、セルB1に"110"、セルB2に"119"と入力される。 (4)csvファイル自体は開かず、必要なときにあらかじめ作成したxlsファイルを立ち上げると、自動でcsvファイルの内容を吸い上げる。 (5)入力されたデータの適否をそれぞれ判定する。 (6)xlsファイルを立ち上げている間にcsvファイルが更新された場合、xlsファイルの更新方法は手動と自動を選択できる。 こんなこと出来るでしょうか? 特に(4)が困っています。csvファイルをエクセルで開いた状態であれば、この内容で出来たのですが・・・。 どなたか良い方法があったら教えて下さい。お願いします。

  • Excelシートを分割してcsvに出力するVBA

    すいませんが、ご教示願います。 パソコンExcelのVBAです。 Excelファイルシートの24,000行あるデータを、 任意に選択した範囲(例えば2行目から3,000行目)をcsvデータに出力する VBA構文が知りたいです。 どなたかおわかりになりますでしょうか。

  • EXCEL VBAでのCSVファイル読み込み、出力で困っています。

    EXCEL VBAでのCSVファイル読み込み、出力で困っています。 データ3件のファイルから3件抽出すると正常にイミディエイトウィンドウへ表示されるのですが データ約38,000件のファイルから3件抽出すると文字化けする項目があるのです。 文字化けする項目の共通点は256文字以降が、どうやら化けているようです。(長文1、長文2の項目) 教えて!goo でいろいろ探してみましたが、これといった解決策が見つかりませんでした。 また、抽出データをCSVで出力しているのですが 始まりと終わりに " が出力されるので困っています。 " が出力されないようにできるのでしょうか? 当方、COBOLでのコーディング経験は実務で4年ほどありますが VBAの知識は学校で少し学んだ程度の初心者です。 わかりやすく教えていただけないでしょうか? sample1.csv データ3件 sample2.csv データ約38,000件(ここにsample1.csvと同じデータが含まれています) Dim adoCON As New ADODB.Connection Dim adoRS As New ADODB.Recordset Dim rec As String 'ADOを使い読み込み専用モードでCSVファイルを扱う準備(オープン)をします adoCON.Open "Driver={Microsoft Text Driver (*.txt; *.csv)}; " & _ "DBQ=c:\Documents and Settings\デスクトップ\test;" & _ "ReadOnly=1" Open "C:\Documents and Settings\デスクトップ\test\test.csv" For Output As #1 'SQLを実行し、指定したIDのデータを抽出します 'ID,名前,,,,,,,,,,,長文1,長文2,,,,,,更新日時 ←こんな感じで20項目 Set adoRS = adoCON.Execute("select * from sample1.csv where (ID = 213428) or (ID = 212717) or (ID = 212917)") 'SQLの実行結果をデータが無くなるまでrecへ格納します Do Until adoRS.EOF = True rec = rec & adoRS("ID") & "," & adoRS("名前") & "," & adoRS("長文1") & "," & adoRS("長文2") & Chr(10) 'カーソルを次の行へ adoRS.MoveNext Loop 'recの内容をイミディエイトウィンドウへ表示 Debug.Print rec 'recの内容を出力 Write #1, rec 'CSVファイルをクローズします Close #1 'レコードセットをクローズします adoRS.Close 'データベースのクローズ adoCON.Close

  • CSV出力に関して

    パソコンで「CSV出力が完了しました」と表示が出ているのに、データがどこにも反映されていません。 CSV出力した内容を、Excelのシートに移したいのですが、どのような手順で行えば良いのでしょうか?

  • EXCEL VBAでのCSV出力について

    EXCELに入力されたデータをCSV出力するプログラムを作成しました。データには日付が入っており年月日がYYYY/MM/DDの形で入力されています。これをハンド作業で名前をつけて保存でCSVに出力すると年月日はそのままの状態で保存されますが、VBAで保存するとMM/DD/YYYYの形になってしまいます。この状態で保存されると、次にEXCELで読み出すと年月日が文字列扱いになってしまいます。新しいマクロの記録で行っても結果は同じでした。 VBAで保存する際、YYYY/MM/DDで保存する方法はないでしょうか。 また、MM/DD/YYYYで保存されたCSVを日付としてEXCELに認識させる方法はあるでしょうか。 教えてください。よろしくお願いします。

  • エクセルのcsv保存で。。

    前と同じような質問ですみません。。。 エクセルのSheet5をcsv形式で保存する際、 名前を付けて保存のダイアログを表示させて、 ファイルの名前を常に「bonaplus.csv」と 既定値で表示させておくようなマクロは できないでしょうか? ※bonaplusの後には作成日付を入力します。 ※csvファイルを作成した後に元のエクセルファイルの  保存になります。