• ベストアンサー

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

imogasiの回答

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

コードを作ってみた風でもなく,回答者にやらせる丸投げです。 >時間がありませんので 下記だって私の場合、できるまでに何十年かかっているか。 プログラムの習得を甘く考えないこと。 ーー VBSを少し深く勉強したのでもないようだから、VBAだけでやる方法にしておくことを勧める。 ーー 回答者側のテストの簡素化の為に、CSVファイルは3つにした。 下記データを作って小数データながらテスト済み。 ””で文字列データを囲む式のCSVデータファイルなら修正が必要。 test01.csv test02.csv test03.csv 下記コードのフォルダのフルパスのユーザー名は実情で変えてください。 下記コードの場合は、データ受け入れシートはシートタブ的に左に寄せ集めてておくこと。 --- Sub test01() For i = 1 To 3 'CSVファイルサブ番号作成 n = Trim(Str(i)) n = Format(n, "00") MsgBox n '--データ受け入れシートを決定 Sheets(i).Activate Open "C:\Documents and Settings\xxxx\My Documents\test" & n & ".csv" For Input As #1 k = 1 'シート第1行目から While Not EOF(1) Line Input #1, a s = Split(a, ",") 'カンマで分離 For j = 0 To UBound(s) '行の各列にデータをセット ActiveSheet.Cells(k, j + 1) = s(j) Next j k = k + 1 'セットするデータ行を1行下へ Wend Close #1 Next i End Sub ーー このほかにVBScriptで ObjText.Readlineを使う Set objFile = CreateObject("Scripting.FileSystemObject") Dim MyFile, MyFileNew MyFile="・・・ Set objText=objFile.OpenTextFile(MyFile) RLog.Open "Select * From tblCoreImportTest",Conn,3,3 Do while not objText.AtEndOfStream strTextLine=objText.Readline data=Split(strTextLine,",") ・・・ や ーー http://ameblo.jp/morningshot/entry-10001147530.html Workbooks.OpenText fileName:="c:\test.csv", _ を使う方法や色々ある。

関連するQ&A

  • vbs xlsをcsvに変換

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

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

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

  • VBSでExcelシートのコピー

    VBSである決まったExcelシートを別なExcelファイルにシートコピーできる方法はないですか? やりたいことは、Excelファイル「A.xls」内の「Sheet1」というシートをExcelファイル「B.xls」の一番末尾に「Sheet1」をコピーする、です。 (Excelのシート名上で右クリック→「移動またはコピー」→移動先ブック名を選択→「末尾へ移動」、「コピーを作成」にチェック、と同じことをVBS上で行いたいのですが。)

  • csvファイルをxlsファイルへ取り込み

    xlsファイルにシート「Sheet1」だけあったとします。 そこからマクロで、 「csvファイルの選択」   ↓ 「csvファイルを選択してそれをシートの末尾へ挿入していく」 ようなマクロができないか考えています。 すいませんが教えていただけないでしょうか?

  • csvをxlsに変換する方法を教えてください

    CSVファイルをXLSに変換する方法を教えてください。 「名前を付けて保存」で拡張子をcsvからxlsに指定して保存したものを開くとデータが”、”で区切られただけで、1列の形にごちゃごちゃデータが詰まった表示になってしまいます。最初に開いた形でそのままxlsの形にしたいのですが何か方法はありますでしょうか。 エクセルのバージョンは2003です。 よろしくお願い致します。

  • VBSを利用して、ファイル名を取得

    VBSを利用して、ファイル名を取得 はじめまして VBSを利用して、ファイルのフルパスを取得したいと思っております。 具体的には、フォルダ内のファイルを1ファイルずつ取得するようなプログラムを 作成したいと思っております。 C:\TEST \2010 \aaa.csv C:\TEST \2010 \bbb.csv C:\TEST \2009 \ccc.csv C:\TEST \2008 \ddd.csv C:\TEST \2008 \eee.csv フルパスを取得したいのですが、どのようにしたら良いでしょうか。 最終的には、上記の読み込んだファイルごとにファイルの中身を1行ずつ確認して、 特定の文字が含まれているか確認をするようなスクリプトにしようと思っております。 そのため、objFS.OpenTextFile("取得フルパス",ForReading)のようにして 取得したフルパスごとに読み込みをしようと思っております。 どなたか、お手数ではございますが、ご教授願います。

  • htmlまたはJavascriptからファイルを引数つきで起動する。

    htmlまたはJavascriptからファイルを引数つきで起動する。 マクロ(macro.xls)に引数(csvファイル名)を渡して起動させたいため、 vbsを作成してマクロを引数つきで実行するようにしました。 コマンドからは >test.vbs /FILE:macro.xls /P:aaa.csv でマクロを実行することができたのですが、 HTMLにリンクを張り、リンクをクリックすることで vbsを引数つきで実行するにはどうすればよいでしょうか? (Javascriptを経由しても構いません)

    • ベストアンサー
    • HTML
  • 複数csvファイルをexcelの各シートに書き込む

    複数のCSVファイルを各々一つのexcelファイルの各ワークシトに書き込む方法のコードを下記のようにQueryTableを使った形にしてみました。 $csvFile1 = "D:\test_data\test_data1.csv" $csvFile2 = "D:\test_data\test_data2.csv" $excel = New-Object -ComObject Excel.Application $excel.Visible = $true $book = $excel.Workbooks.Add() $Book.Worksheets.Add() $sheet1 = $excel.Worksheets.Item(2) $sheet2 = $excel.Worksheets.Item(1) $startRange = "C2" $outputColumn = $sheet1.Range($startRange).Column $outputRow = $sheet1.Range($startRange).Row $QueryTable = $sheet1.QueryTables.Add("TEXT;$csvFile1",$sheet1.cells($outputRow,$outputColumn)) $QueryTable.TextFileCommaDelimiter = $True $QueryTable.TextFilePlatform = 65001 $QueryTable.TextFileStartRow = 1 $QueryTable.Refresh($false) $QueryTable.Name = "仮テーブル" $QueryTable.Delete() $startRange = "C2" $outputColumn = $sheet2.Range($startRange).Column $outputRow = $sheet2.Range($startRange).Row $QueryTable = $sheet2.QueryTables.Add("TEXT;$csvFile2",$sheet2.cells($outputRow,$outputColumn)) $QueryTable.TextFileCommaDelimiter = $True $QueryTable.TextFilePlatform = 65001 $QueryTable.TextFileStartRow = 1 $QueryTable.Refresh($false) $QueryTable.Name = "仮テーブル" $QueryTable.Delete() [System.Runtime.Interopservices.Marshal]::ReleaseComObject($sheet) > $null [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) > $null [gc]::Collect() これは2個のcsvファイルだから何とかなっていますがファイルが増えた場合これではとても面倒なことになります。私の能力ではコンパクトにコードを纏めることが出来ません。コンパクトな方法をお教えください。別にExport-Excel等使う方法でもかまいません。

  • 複数csvファイルをexcelの各シートに書込む2

    前回powershellを使い複数のcsvをそれぞれのシートに分けて新規Excelファイルとして書き込む方法についてお教え頂きましたが、既存ファイルの場合下記の下記のコードのようにすると既存シートがある場合既存のシートにシート名を変え書き加えられることになります。既存シートをそのままにして新規シートとして追加するような方法をお教えください。 $csvFiles = @("D:\test_data\test_data1.csv", "D:\test_data\test_data2.csv") # Excelファイルのパス $excelPath = (Get-ChildItem "D:\test_data\AAA.xlsx").FullName $excel = New-Object -ComObject Excel.Application $excel.Visible = $true $book = $excel.Workbooks.Open($excelPath) foreach ($index in 0..($csvFiles.Length - 1)) { if ($index -eq 0) { $sheet = $book.Sheets.Item(1) } else { $sheet = $book.Sheets.Add() } $sheet.Name = "data" + ($index + 1) $startRange = "C2" $QueryTable = $sheet.QueryTables.Add("TEXT;"+$csvFiles[$index], $sheet.Range($startRange)) $QueryTable.TextFileCommaDelimiter = $True $QueryTable.TextFilePlatform = 65001 $QueryTable.TextFileStartRow = 1 $QueryTable.Refresh($false) $QueryTable.Name = "仮テーブル" $QueryTable.Delete() } [System.Runtime.Interopservices.Marshal]::ReleaseComObject($sheet) > $null [System.Runtime.Interopservices.Marshal]::ReleaseComObject($book) > $null [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) > $null Remove-Variable sheet, book, excel [gc]::Collect() [GC]::WaitForPendingFinalizers() なお、csvファイルの指定方法は違います(ファイル名で指定する方が分からないのでコピペのコードそのままに近い)がExport-Excelを使った下記コード場合同じシート名がある場合は、そのシートに書き込まれますがそれ以外は新規シート名(csvファイル名)として付け加えられます。 $csvs = Get-ChildItem .\* -Include *.csv $csvCount = $csvs.Count Write-Host "Detected the following CSV files: ($csvCount)" foreach ($csv in $csvs) { Write-Host " -"$csv.Name } $excelFileName = "D:\test_data\AAD.xlsx." Write-Host "Creating: $excelFileName" foreach ($csv in $csvs) { $csvPath = ".\" + $csv.Name $worksheetName = $csv.Name.Replace(".csv","") Write-Host " - Adding $worksheetName to $excelFileName" Import-Csv -Path $csvPath | Export-Excel -Path $excelFileName -WorkSheetname $worksheetName -StartRow 2 -StartColumn 3 } しかしならこの方法では大きなデータの場合処理時間を要することになります。処理時間で言うなら下記コードの方が一番速いですがやはり新規シートに置き換えられる問題があります。 $sourceFiles = @("D:\test_data\test_data1.csv", "D:\test_data\test_data2.csv") $outputFile = "D:\test_data\AAE.xlsx" $excel = New-Object -ComObject Excel.Application $excel.Visible = $false $excel.DisplayAlerts = $false $outputWorkbook = $excel.Workbooks.Add() $index=1; foreach ($sourceFile in $sourceFiles) { $workbook = $excel.Workbooks.Open($sourceFile) foreach ($sheet in $workbook.Sheets) { $sheet.Copy([ref]$outputWorkbook.Sheets.Item($outputWorkbook.Sheets.Count)) } $index=$outputWorkbook.Sheets.Count $workbook.Close($false); } $outputWorkbook.Sheets.Item($index).Delete() $outputWorkbook.SaveAs($outputFile); $excel.Quit(); [System.Runtime.InteropServices.Marshal]::ReleaseComObject($outputWorkbook) | Out-Null; [System.Runtime.InteropServices.Marshal]::ReleaseComObject($excel) | Out-Null; Write-Output "Sheets have been combined into $outputFile"; 私のコピペ能力ではここまでです。シート名が同じの場合は上書きされそれ以外は新規シートとして追加される方法になれば幸いです。よろしくお願いいたします。

  • PHPで.xls→.csvへの変換はできますか?

    お世話になります。よろしくお願いします。 今PHPでcsvファイルを扱うプログラムを作成しているのですが、 クライアントが.xslのファイルをエクセルで開いて、".csvで保存"を行い、プログラムに読み込ませる という手段を取っています。 ここで、プログラムが読み込むファイルは.xlsのままで、プログラム内部により、 .csvに変換して扱うという手段を取りたいのですが、可能なのでしょうか? そのようなクラス、関数等ありましたら、ご教示下さい。

    • ベストアンサー
    • PHP