EXCEL VBAで複数条件の小計を出す処理を自動化したいです
解決したいこと
EXCEL VBAで複数条件の小計を出す処理を自動化したいです。
下記の、Sheet1,Sheet2… から Sheet集計 をつくりたいです。
参考サイト、類似処理のコード等、教えてください。
Sheet1
商品名 サイズ 個数
A 1 100
B 2 100
C 3 100
C 1 100
B 2 100
Sheet2
商品名 サイズ 個数
A 1 100
D 1 100
B 3 100
B 2 100
Sheet集計
商品名 サイズ 合計個数
A 1 200
B 2 300
B 3 100
C 1 100
C 3 100
D 1 100
発生している問題・エラー
商品名はA~Dだけでなく、E,F…と増えていく可能性あり、サイズも同様。元のシートは17〜16個ほどあることが多いです。
対応できるように項目とデータ数、シート数は元のファイルから取得したいです。
自分で試したこと
まず、すべてのシートを縦に結合します。
Sub Macro1()
'
' Macro1 Macro
'
'
Range("A1").Select
ActiveCell.Formula2R1C1 = _
"=FILTER(VSTACK(Sheet1:Sheet8!RC:R[199]C),VSTACK(Sheet1:Sheet8!RC:R[199]C)<>0)"
Range("A1").Select
Selection.Copy
Range("B1").Select
ActiveSheet.Paste
Range("C1").Select
ActiveSheet.Paste
End Sub
これでは、Sheet8までしか対応していないので、ブックのシート数に合わせて書き換える必要があります。
=VSTACK(最初のシートを自動取得:最後のシートを自動取得!A1:C200)
こんな感じにしたいです。
少しいじってみました。
Sub Macro1()
'変数の宣言 ワークシート型
Dim 最初のシート As Worksheet
Dim 最後のシート As Worksheet
'変数に値を代入
Set 最初のシート = Worksheets(2)
Set 最後のシート = Worksheets(Sheets.Count)
'A行の処理
Range("A1").Select
ActiveCell.Formula2R1C1 = _
"=FILTER(VSTACK(最初のシート:最後のシート!RC:R[199]C),VSTACK(最初のシート:最後のシート!RC:R[199]C)<>0)"
'B,C行も同様に
Range("A1").Select
Selection.Copy
Range("B1").Select
ActiveSheet.Paste
Range("C1").Select
ActiveSheet.Paste
'Macro2
End Sub
こちら実行すると、「値の更新:最後のシート」という題の保存画面が開いてしまいます。A1:C1には、「#NAME?」エラーが表示されます。
下記は結合後のデータに行いたい処理です。
Sub Macro2()
'
' Macro2 Macro
'
'
Range("G1").Select
ActiveCell.Formula2R1C1 = "=UNIQUE(RC[-6]:R[199]C[-5])"
Range("I1").Select
ActiveCell.Formula2R1C1 = _
"=SUMIFS(RC[-6]:R[199]C[-6],RC[-8]:R[199]C[-8],RC[-2]:R[199]C[-2],RC[-7]:R[199]C[-7],RC[-1]:R[199]C[-1])"
Range("I2").Select
End Sub