私の Excel ブックには、3 つの別々のスプレッドシートがあります。スプレッドシートの形式は同一で、異なるカテゴリ (乗用車、トラックなど) のカウント値を表しています。次の方法でスプレッドシートを結合し、結合されたデータ (CombinedCount.xlsx) を含む新しいブックを作成する必要があります。
='乗用車'!B3+'大型トラック'!B3+'小型トラック'!B3
合計するセルが多数あり、このコードはまったく同じ形式の多数のワークブックに適用されます。このプロセスを Python コードで自動化する方法はありますか?
答え1
これを Python で実行したい特別な理由があるのでしょうか? Excel では、次の VBA マクロを使用して、このほとんどの操作を単独で実行できます。
Sub CombineSheets()
'
' Add three identically-formatted sheets,
' putting the result into a fourth one, and then moving it to a new workbook.
'
Sheets(1).Copy After:=Sheets(3)
Sheets(4).Name = "Combined Counts"
Sheets(2).Select
Cells.Copy
Sheets(4).Select
Range("A1").Select
Selection.PasteSpecial Operation:=xlAdd
Sheets(3).Select
Cells.Copy
Sheets(4).Select
Selection.PasteSpecial Operation:=xlAdd
Sheets(4).Move
End Sub
これ
- 最初のシートの完全なコピーを作成し、3 番目のシートの後に配置します。新しいシートは、その後 として参照できます。
Sheets(4)
最初のシートが と呼ばれる場合Passenger
、新しいシートは最初は と呼ばれますPassenger (2)
。 - 新しいシートの名前を変更します
Combined Counts
。 - 2 枚目のシート全体をコピーし、加算を使用して新しいシートに貼り付けます。(これは、「貼り付け」→「形式を選択して貼り付け…」で対話的にアクセスし、「操作」セクションから「追加」を選択することでアクセスできる機能です。) 次に、3 枚目のシートで繰り返します。2 枚目と 3 枚目のシートの数値以外のデータ (つまり、テキスト) は無視されます。最初のシートの特定のセルにテキストがある場合、他のシートの 1 つに数値があっても、そのテキストは結果に残ります。(ただし、シートの形式が同一であるとおっしゃっているので、これは問題にならないはずです。)
- 新しいワークシートをブックから分離して、新しいワークブックを作成します。
次に、新しいワークブックを保存してウィンドウを閉じるには、次のように入力します。
Do
fName = Application.GetSaveAsFilename( _
FileFilter:="Excel Workbook (*.xlsx), *.xlsx")
Loop Until fName <> False
ActiveWorkbook.SaveAs Filename:=fName
ActiveWindow.Close
の前にEnd Sub
. を付けるか、他の方法でファイル名を取得することもできます。
答え2
このタスクには Power Query アドインを使用します。フォルダーからすべてのファイルまたは選択したファイルをインポートし、各ファイルのデータを組み合わせたテーブルを作成できます (指定したとおり、標準レイアウトであることが前提です)。例:
http://www.excelguru.ca/blog/2013/11/26/from-txt-files-to-bi-solution/
Power Query には、データを要約して集計できる Group By 関数 (Count、Count Distinct、Sum、Average など) もあります。