0

私はスクリプトの初心者です。私は多くの検索を行ってきましたが、私の問題に合った解決策を見つけることができませんでした.

  • 私は、同じセル (A2 & B2) に 1 つのワークシートと 2 つの値を含む、さまざまな数の CSV を含むフォルダーを持っています。
  • ワークシート名が同じではありません。

論理的には、このフォルダー内の各 CSV に移動し、2 つの値を取得して、MonthlyAvg という名前の XLS の 1 つのワークシートに 2 列で配置するスクリプトを作成する必要があります。

つまり、最初の範囲はマスター ドキュメントの A2 と B2 に移動し、2 番目の A2 と B2 はマスター ドキュメントの A3 と B3 に移動します。私の考えでは、これは配列で処理する必要があります。残念ながら、配列を論理的に作成して見つけたものを、これまでにまとめたものに入れることができないため、ここで立ち往生しています。ヘルプやガイダンスをいただければ幸いです。

strPath = "D:\MacWP\MacWork\Thermometers\TOT\MonthlyAvg\"      
Set objExcel = CreateObject("Excel.Application") 
objExcel.Visible = True 
objExcel.DisplayAlerts = False 

Set objFso = CreateObject("Scripting.FileSystemObject") 
Set objFolder = objFso.GetFolder (strPath) 

 For Each objFile In objFolder.Files      
    If objFso.GetExtensionName (objFile.Path) = "csv" Then 
        Set objWorkbook = objExcel.Workbooks.Open(objFile.Path)
        'Find the first worksheet name
        FirstSheetName = objExcel.Activeworkbook.Worksheets(1).Name         

        'Set the first worksheet name
        Set objSheet = objWorkbook.Sheets (FirstSheetname)

        'Display the value in B2 of the first worksheet     
        MsgBox objSheet.Range("B2").Value
        'Display the value in A2 of the first worksheet
        MsgBox objSheet.Range ("A2").Value          

        objWorkbook.Close False 'Save changes 
    End If      
Next 
objExcel.Quit 
4

2 に答える 2

0

以下のようにを使用して、すべての値をcsvファイルに直接書き込むことができます。以下のコードは、のoutput.csv下にファイルを作成しますstrPath

Dim objExcel
Dim objFSO
Dim objTF
Dim objWB

strpath = "c:\temp"

Set objExcel = CreateObject("Excel.Application")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strpath)
Set objTF = objFSO.CreateTextFile(strpath & "\output.csv", True, False)
objExcel.DisplayAlerts = False

For Each objFile In objFolder.Files
If objFSO.GetExtensionName(objFile.Path) = "csv" Then
Set objWB = objExcel.Workbooks.Open(objFile.Path)
objTF.WriteLine objWB.Sheets(1).Range("B2") & "," & objWB.Sheets(1).Range("A2")
objWB.Close False 'Save changes
End If
Next

objTF.Close
With objExcel
.DisplayAlerts = True
.Quit
End With
于 2012-08-29T03:04:06.167 に答える
0

ファイルの検索は既に完了しており、唯一の質問は、部分的な値をマスター Excel ファイルに保存する方法ですよね?

そのために、「インデックス」で For サイクルを使用できます。

Dim i As Integer, j As Integer, n As Integer   
Dim filesOpen As Long

With Application.FileSearch

    .LookIn = "C:\Examples"

    .FileType = msoFileTypeExcelWorkbooks

      'There are wb's

      If .Execute > 0 Then

        For n = 1 To .FoundFiles.Count

          Workbooks.Open (.FoundFiles(i))

        Next n

filesOpen = n

end With

For i = 2 To filesOpen

'i = 2 'fila
j = 1 'columna    

'column A2        
Application.Workbooks("MasterFile").Worksheets("nameOfYourMasterSheet").Cells(i, j).Value = Application.Workbooks("Book1.cvs").Worksheets("nameOfYourSheet").Cells(2, j).Value

'column B2
Application.Workbooks("MasterFile").Worksheets("nameOfYourMasterSheet").Cells(i, j+1).Value = Application.Workbooks("Book1.cvs").Worksheets("nameOfYourSheet").Cells(2, j+1).Value

next i

したがって、最後の for サイクルは、マスター ファイルに値を与えるためのものです。「i」インデックスは、ワークブックがなくなるまで昇順である唯一のインデックスです。

配列を使用する必要はありません。「i」の値に注意してください。

于 2012-08-29T02:22:08.387 に答える