電子書籍の厳選無料作品が豊富!

お世話になっております。

VBA学習中のものです。
貼付資料のような処理をマクロで行いたいと考えています(学習もかねて)。

既存データ(『H25』シート)発注機関ごとに、(業務名)(入札会社)(金額)(結果)が記載されています。
          ↓
作成データ(『受注状況』シート) マクロ実行前⇒マクロ実行後 になるようにマクロを組みたいと考えています。

現在の私の知識で考えた処理の手順

(1)重複しないように入札会社名を抽出しB列に列挙

(2)各会社名の下に行を2行挿入し、入札、落札、金額を記入

(3)発注機関と入札会社名から件数及び金額を記入

(4)金額順に並び替え

で行けるかな??と考えています。
(1)(2)(4)に関しては、今の私の知識で行けるのですが、(3)が問題です。。。
IF構文と繰返し構文を使って・・・なんて考えたのですが、イマイチ分かりません。

どなたか、ご教授をお願いいたします。

また、前提条件とした処理の手順にご指摘が有ればよろしくお願いします。

「エクセルVBA データの集計」の質問画像

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/10/15 14:46

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

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

お礼日時:2014/10/15 14:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!