• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:WSHでExcelをCSV出力)

WSHでExcelをCSV出力

このQ&Aのポイント
  • WSHを使用してExcelをCSV形式で出力する方法について質問です。
  • 現在、ExcelをCSV形式で出力することができていますが、指定した範囲のデータを簡単に出力する方法を知りたいです。
  • 例えば、C~Zの行の5行目から存在する全てのデータを出力する際にどのように実装すれば良いか教えていただけると助かります。

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

  • ベストアンサー
  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.1

Excelが手元にないのでソースは提示出来ませんが、 出力したい範囲を新しいワークシートにコピーして、そのワークシートをCSV出力すればいいのではないでしょうか?

takashi_it
質問者

補足

これで動きました↓ ファイ名:ExcelToCSV.vbs ' ------------------------------------------------------------------------------ ' 名称:ExcelToCSV ' 概要:ExcelからCSVに出力する ' :CSVに出力する範囲指定が出来る ' 引数1:投入Excel名 ' 引数2:出力CSV名 ' 引数1:範囲スタート列(A~IV) ' 引数1:範囲スタート行(1~65535) ' 引数1:範囲エンド列(A~IV) ' 使用例:ExcelToCSV.vbs 入力.xls 出力.csv B 5 C ' ------------------------------------------------------------------------------ '内部変数 Dim objXL Dim RangeStr '引数 Dim InPath Dim OutPath Dim RangeStartClm Dim RangeStartRow Dim RangeEndClm '引数Check If WScript.Arguments.Count < 5 Then MsgBox "usage: wscript ExcelToCSV.vbs 投入Excel名 出力CSV名 範囲スタート列 範囲スタート行 範囲エンド列" WScript.Quit End If '引数を格納 Path = Replace(WScript.ScriptFullName,WScript.ScriptName,Trim(WScript.Arguments(0))) OutPath = Replace(WScript.ScriptFullName,WScript.ScriptName,Trim(WScript.Arguments(1))) RangeStartClm = Trim(WScript.Arguments(2)) RangeStartRow = Trim(WScript.Arguments(3)) RangeEndClm = Trim(WScript.Arguments(4)) '引数からコピーするレンジを作成  例 ⇒ "C5:E65536" RangeStr = RangeStartClm & RangeStartRow & ":" & RangeEndClm & "65536" 'ExcelからCSVを作成 Set objXL=CreateObject("Excel.Application") objXL.DisplayAlerts=False objXL.Workbooks.Open Path,,True objXL.Worksheets(1).Range(RangeStr).Copy objXL.Worksheets.Add objXL.Worksheets(1).Range("A1").Select objXL.ActiveSheet.Paste objXL.Worksheets(1).SaveAs OutPath, 6 objXL.ActiveWorkBook.Close objXL.Quit 'Scriptの終了 WScript.Quit

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

関連するQ&A

  • WSHで、EXCELにワークシートをCSVから読み込んで追加したい。

    WSHを使って、EXCELを起動して、既存のCSVファイルからデータを読み込みたいのですが、複数のCSVから読み込むなどして、同じワークブックの新しいシートにCSVから読み込んだデータを追加していきたいのですが、どうやればよいのかわかりません。 下のソースのようにしたのですが、そうすると、別のワークブックとして開いてしまうので、わからなくなってしまいました。お願いします。 set Exl=CreateObject("Excel.Application") Exl.Visible=True Exl.workbooks.add Exl.workbooks.OpenText "c:\data.csv"

  • Excelの複数シートからcsvファイルを出力

    Dim objXL Dim f Dim m Dim ws Set objXL=CreateObject("Excel.Application") 'objXL.Visible=True objXL.DisplayAlerts=False For Each f In WScript.Arguments objXL.WorkBooks.Open f For Each ws In objXL.ActiveWorkBook.Worksheets If ws.UsedRange.Rows.Count=1 and ws.UsedRange.Columns.Count=1 and ws.Cells(1,1)="" Then 'MsgBox ws.Name&"Empty" Else ws.SaveAs f & "." & ws.Name & ".csv", 6 End If Next objXL.ActiveWorkBook.Close Next objXL.Quit WScript.Quit 上記スクリプトファイルで ファイル名が「[元Excelファイル名].[シート名].csv」 のcsvファイルが出力されますが、これを ファイル名を「[シート名].csv」にするには どのようにすればいいのでしょうか。 ws.SaveAs f & "." & ws.Name & ".csv", 6 の箇所を ws.SaveAs ws.Name & ".csv", 6 に変更したのですが、うまくいきませんでした。

  • Accessで空のExcelファイルを出力する方法について

    下記を実行した所、C:\excel.xlsのセルA1に「1」と記述されました。 【ソース】 Private Sub コマンド0_Click() Dim objExcel As Object Set objExcel = CreateObject("Excel.Application") objExcel.Workbooks.Open FILENAME:="C:\excel.xls" objExcel.Range("A1") = 1 objExcel.Application.ActiveWorkbook.Save objExcel.Application.Quit End Sub しかし、C:\excel.xlsが存在しない状態で実行すると下記のエラーメッセージが表示されました。 【エラーメッセージ】 実行時エラー '1004' 'C:\excel.xls'が見つかりません。ファイル名およびファイルの保存場所が正しいかどうか確認してください。 上記現象を回避する為には、毎回空のExcelファイルを出力した上でセルに値を書き込めば良いと思いましたが、空のExcelファイルを出力する方法が分かりませんでした。 その為、何かアドバイスをいただける方がいらっしゃいましたら、どうかよろしくお願いします。

  • Excel VBAでCSV出力をすると実行時エラー

    Excelで品番ごとの数量データなどを他のシステムに取り込むためにCSV形式で出力するプログラムをVBAで作りました。 CSV出力を実行すると 「実行時エラー1004: 'ファイル名.csv'は読み取り専用です。アクセスできません。」 のエラーが出てしまいます。 このプログラムを作成したのは去年であり、Windows XPとExcel2003の環境では一度も出なかったエラーなのですが、PCの更新で新しい端末がWindows7とExcel2010となってから出るようになりました。 コードは以下の通りです ================================================================== 11桁の品番の間のハイフンや後ろに記号などを削除してTempシートのA列にデータを貼り付け(コード省略) bolTemp = Application.DisplayAlerts Application.DisplayAlerts = False Sheets("temp").Copy 'CSV出力 ActiveWorkbook.SaveAs Filename:="C:\Hinban Data.csv", FileFormat:=xlCSV, Local:=True ActiveWorkbook.Saved = True ActiveWorkbook.Close Application.DisplayAlerts = bolTemp MsgBox ("CSVデータの出力が完了しました(C:\Hinban Data.csv)") End Sub ================================================================== エラーが起きるエクセルファイルを以前の端末(廃棄前)にコピーして実行したらCSV出力ができました。 Windows7とExcel2010の環境下では何かコードの追記が必要なのでしょうか。 ネット検索などで調べましたがそれらしいヒントが見つかりません。 対処法などご存じでしたら、教えていただけるととても助かります。 よろしくお願いいたします。

  • ExcelのマクロでCSVファイルを開くと遅いのですが

    ExcelのマクロでCSVファイルを開くと遅いのですが速く開く方法はありますか? 普通にファイル-開くに比べてかなり遅いです。 下記のVBAで記述してあります。 Workbooks.Open Filename:=fname ActiveWorkbook.SaveAs Filename:=fname, FileFormat:=xlCSV, _ CreateBackup:=False ActiveWorkbook.Close savechanges:=False

  • VBA 新規にエクセルを開き既存のファイルを開く

    VBAで新規にエクセルのアプリケーションを起動し、 その中に既存のファイルを起動する方法は有りますか? Sub Sample() Dim appExcel As Excel.Application Dim WSH As Variant Dim strPath As String Set appExcel = New Excel.Application Set WSH = CreateObject("Wscript.Shell") strPath = ActiveWorkbook.Path With appExcel .Visible = True .Workbooks.Add .ActiveWorkbook.SaveAs (strPath & "\ test.xls") End With Set WSH = Nothing End Sub このコードは、ネットから拾ったサンプルコードなのですが 新しいアプリケーションでエクセルを立ち上げることはできたのですが 新規のブックが開いてしまい、 更に、開きたいファイルに上書き保存してしまいそうです。 新規のブックが開く原因は .Workbooks.Addで、 上書き保存する原因は .ActiveWorkbook.SaveAs だとわかってるのですが、 この部分を同変更すればいいのかがわかりません。 Workbooks.Open?Filename:="C:\Users\test.xlsx" だと、現在実行しているvbaファイルを同じ枠内で 該当のファイルが開いてしまいます。

  • VBSでEXCEL⇒CSV変換で日付の書式が変わる

    いつもお世話になっております。 標題の件なのですが、Excelで"2011/04/28"と入っている項目を VBSでCSVに変換して出力すると、"4/28/2011"と出力されます。 objExcel.ActiveWorkbook.SaveAs ファイル名, xlCSV, true とすると、コントロールパネルの地域と言語のオプションにある短い形式で出力されるという記事を見つけたのですが、"4/28/2011"と出力されてしまいます。 解決方法をご教授願います。よろしくお願い致します。

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

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

  • エクセルからCSVファイルに出力したい?

    エクセルのシートからマクロを使ってCSVファイルに出力したいです。 そこで調べたのですが、 http://oshiete1.goo.ne.jp/kotaeru.php3?q=2376607 こちらの質問で以下のようなコードが参考になりました。 Sub Macro1() Dim myBook As String myBook = ActiveWorkbook.FullName myBook = Left(myBook, Len(myBook) - 3) & "CSV" ActiveSheet.Copy ActiveWorkbook.SaveAs Filename:=myBook, FileFormat:=xlCSV ActiveWindow.Close False End Sub このコードではCSVのファイル名がエクセルシートのファイル名になってしまいます。 今回の質問ですが、CSVファイルを違う名前で保存するにはどのようにすればいいのでしょうか? (CSVファイルの名前は常にabc.csvで保存するものとします)

  • WSH(Excel出力)の同時実行数の制限

    WSHでExcel出力処理を行っているのですが、 同時実行数が30を超えると、Excelが不安定になるようで、  Set objBook = objExcelApp.Workbooks.Open("C:\xxx\zzz.xls", 0, False) の行で、  エラー:WorkbooksクラスのOpenプロパティを取得できません。  コード:800A03EC  ソース: Microsost Office Excel というエラーが発生して異常終了してしまうのです。 同時実行数の上限など、また、それ以外の原因について、 ご存知の方がいらっしゃいましたら、コメント頂ければ幸いです。 ちなみに、同時実行数が30未満の場合は、正常終了するので、 コードの内容には、問題ないと思っております。 Excelのバージョンは、2003で、ファイルの構成は、 wsfファイル(yyy.wsf) vbsファイル(wsh_excel.vbs)の2ファイルを配置し、 以下のような形で、実行しています。 Set WshShell = Server.CreateObject("WScript.Shell") Set objBatch = WshShell.Exec(strCmd)  ※ strCmdには、以下のような値が設定されます。     cmd.exe wscript.exe "C:\xxx\yyy.wsf" ■ yyy.wsfの内容 <?xml version="1.0" encoding="shift_jis" ?> <job id="zzz"> <script language="VBScript" src="wsh_excel.vbs"/> <script language="VBScript">  Call Excel_Main() </script> </job> ■ wsh_excel.vbsの内容(抜粋) Sub Excel_Main()  Set objExcelApp = Wscript.CreateObject("Excel.Application")  Set objBook = objExcelApp.Workbooks.Open("C:\xxx\zzz.xls", 0, False)     :     : End Sub