- ベストアンサー
エクセルVBAでデータの集計を行う方法とは?
- エクセルVBAを使用してデータの集計を行う方法について解説します。
- 既存データを発注機関ごとに分類し、マクロを使って入札会社ごとの集計を行います。
- 入札会社ごとの件数や金額を計算し、結果を新しいシートにまとめます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
(1)重複しないように入札会社名を抽出しB列に列挙 ↓ (2)各会社名の下に行を2行挿入し、入札、落札、金額を記入 ↓ (3)発注機関と入札会社名から件数及び金額を記入 ↓ (4)金額順に並び替え 上記(3)のみの一例ですが。 「受注状況」の2行目から最終行まで繰り返し処理で 「H25」シートを (A)オートフィルタで「会社名」「件名」で絞ってから入札件数を取得 (B)追加で空白以外で絞ってから落札件数を取得 (C)金額(D列)のフィルタ後の合計値を取得 取得した値を「受注状況」へ書き出し 最終行はFor i = 2 To Cells(Rows.Count,"A").End(xlUp).Rowとかで回してください。 ■(A)オートフィルタで「会社名」「件名」で絞ってから入札件数を取得 Sheets("H25").Columns("A:E").AutoFilter Field:=3, Criteria1:="A社" Sheets("H25").Columns("A:E").AutoFilter Field:=1, Criteria1:="栃木県" MsgBox Sheets("H25").AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count - 1 ■(B)追加で空白以外で絞ってから落札件数を取得 Sheets("H25").Columns("A:E")..AutoFilter Field:=5, Criteria1:="<>" MsgBox Sheets("H25").AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count - 1 ■金額(D列)のフィルタ後の合計値を取得 MsgBox WorksheetFunction.Sum(Sheets("H25").Columns("D").SpecialCells(xlCellTypeVisible)) ※)ループ内の先頭でフィルターを以下の処理で全表示してください On Error Resume Next mySt.ShowAllData On Error GoTo 0
その他の回答 (1)
- eden3616
- ベストアンサー率65% (267/405)
No1の捕捉と訂正です。 ■訂正 最後のフィルター全表示は以下のようにしてください。 Sheets("H25").ShowAllData ■補足 No1の(A)~(C)は「H25」シートに対して行う処理になります。 If構文やForループ等はご存じかとおもいますので省きますが、 たとえば以下のように 「受注状況」シートの処理においてはSelect構文で 「入札、落札、金額」を判定されると良いかと思います。 Dim 最終行 As Long 最終行 = Cells(Rows.Count , "A").End(xlUp).Row For i = 2 To 最終行 For j = 4 To 7 Select Case (i - 2) Mod 3 Case 0 処理(A) Case 1 処理(B) Case 2 処理(C) End Select '出力処理 Sheets("受注状況").Cells(i , j) = 取得値 Next j Next i http://officetanaka.net/Excel/vba/speed/index.htm まぁ、大量にデータがあるのであれば配列を確保しておいてから、 集計して一気に出力する方が高速ですが。
お礼
どうもありがとうございました。
お礼
どうもありがとうございました。