2016-05-23 16 views
-1

私は複数のExcelファイルを操作する必要があり、私の研究によれば、powershellはそうする最良の方法です。ここに私の質問です。Powershellを使用した複数のExcel操作

以下のスクリーンショットと似た形式の500以上のExcelファイルがあります。

Sample Excel File Screenshot

各ファイルが2枚を持っている優れています。実際に重要なのは、データを含むシート2のデータです。あなたが見ることができる支柱列の値を空白にして、私は自動的に値を挿入したいと思います。ブランチはセルB2から取得されます。私は本当に1回の実行で500以上のすべてのExcelファイルを操作することができます。あなたが手伝ってくれることを願ってまた、500以上のファイルはファイル名が異なりますが、形式は同じです。

答えて

2

PowerShellは確かにかなり簡単にこれを行うことができます。最初にファイルのリストを取得し、次にExcelを起動し、ForEachループでファイルを開き、B2の値を見つけて、B列のすべてのセルで5行以上使用します。そのファイルを保存して閉じ、次のファイルに移動します。最後に、Excelを終了します。

#Get list of files 
$Files = Get-ChildItem c:\Path\To\Files\*.xlsx 

#Launch Excel 
$XL = New-Object -ComObject Excel.Application 

ForEach($File in $Files){ 
    #Open the file and get the Data sheet 
    $WB = $XL.Workbooks.Open($File.Fullname) 
    $Sheet = $WB.Worksheets.Item('Data') 

    #Get the value from B2 
    $Branch = $Sheet.Rows.Item(2).Cells.Item(2).Value2 

    #Loop through rows, skipping the first 4, and set the branch value 
    $($Sheet.UsedRange.Rows) | Select -Skip 4 | ForEach{ $_.Cells.Item(2).Value2 = $Branch } 

    #Save and close the file 
    $WB.Save() 
    $WB.Close($true) 
} 

#Close Excel 
$XL.Quit() 
+0

は、魅力のように動作@TheMadTechnician –

0

私はvbaにコードを書いています。 ファイル名とパスの形式で入力する必要があり、それぞれのExcelファイルを開き、必要なデータを必要な場所に書き込んで保存して閉じます。 (500個のファイルはすべて1つのフォルダにあり、そのフォルダには他のファイルはありません)。更新された部分では、1つのフォルダにあるすべての500個のファイルについてget filesnames along with pathsを試して開き、編集を続けます。 フォルダパスを更新するのを忘れないでください。

Sub Open_n_Edit() 
Application.EnableEvents = False 
Dim objFSO As Object 
Dim objFolder As Object 
Dim objFile As Object 
Dim filenames(500) As String 

'Updated portion' 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objFolder = objFSO.GetFolder("Put here the path for the folder containing 500 excel files without \ at end") 
i = 1 
For Each objFile In objFolder.Files 
    filenames(i) = objFile.Path 
    i = i + 1 
Next objFile 
'updated portion' 

For i = 1 To 500 
    Workbooks.Open Filename:=filenames(i) 
    Lastrow = ActiveWorkbook.Sheets("Data").Range("A4").End(xlDown).Row 
    Range("B5:B" & Lastrow) = Range("B2").Value 
    ActiveWorkbook.Save 
    ActiveWorkbook.Close 
Next 

Application.EnableEvents = True 
End Sub 
+0

非常に@Ethun_Huntに感謝します。私はVBAでの作業経験がないので、これを勉強しようと思います。 –

+0

更新:実行時エラー '1004':アプリケーション定義またはオブジェクト定義のエラー –

+0

@Michelle Santos、エラーはおそらく配列にファイル名を指定しなかったためです。ファイルのリストを取得するタスクを簡単にするために、vba自体でそれを行うためのコードが含まれていました。これはあなたのために今働くことを願っています。 –

関連する問題