複数のスプレッドシートの値を合計する (VBA)

複数のスプレッドシートの値を合計する (VBA)

私の 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 など) もあります。

関連情報