• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBA データの集計)

エクセルVBAでデータの集計を行う方法とは?

このQ&Aのポイント
  • エクセルVBAを使用してデータの集計を行う方法について解説します。
  • 既存データを発注機関ごとに分類し、マクロを使って入札会社ごとの集計を行います。
  • 入札会社ごとの件数や金額を計算し、結果を新しいシートにまとめます。

質問者が選んだベストアンサー

  • ベストアンサー
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

(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

genta1019boston
質問者

お礼

どうもありがとうございました。

その他の回答 (1)

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

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 まぁ、大量にデータがあるのであれば配列を確保しておいてから、 集計して一気に出力する方が高速ですが。

genta1019boston
質問者

お礼

どうもありがとうございました。

関連するQ&A