• 締切済み

集計について

A列に番号、B列に作成日、C列に作成者、D列に作成数とあります C列でソートした後にF列に作成者毎の合計が入力されています。その合計をB列の作成日の個人毎の個数で割ってG列に出力したいのですが、マクロではどうやるのでしょう。(斎藤の日付個数は8/7が二つあるので3になる) 教えてください A B C D E F   G 1 10 8/7 斎藤 300 2 11 8/7 斎藤 200 3 12 8/9 斎藤 500 4 13 8/10斎藤 100 1100  333.3 5 14 8/7 山田 100 6 15 8/9 山田 200 7 16 8/10山田 500 800 266.6 8 17 8/6 渡部 500 9 18 8/7 渡部 400 900 450.0 この様な表なのですが

みんなの回答

  • e10go
  • ベストアンサー率38% (47/122)
回答No.3

少し遅くなりましたが、F列に合計、G列に平均を出すマクロを考えました。 なお、平均は小数第2位以下を切り捨てています。 また、前提条件として、1行目からデータがあり、ソート時に最優先されるキーに名前、2番目に優先されるキーに日付を指定している事としています。 '-------マクロコード---------始まり 'マクロコードを見やすくするため、マクロコードの先頭の空白は全角にしています。 'VBEに貼り付けて使用する際は、全角空白を半角空白に変換してください。 Sub test() Dim lng1 As Long Dim lng2 As Long Dim intCount As Integer Dim lngSum As Long   For lng1 = 1 To 1000     If Cells(lng1, "C") = "" Then       Exit For     Else       intCount = 1       lngSum = Cells(lng1, "D")       For lng2 = lng1 + 1 To 1000         If Cells(lng2, "C") = Cells(lng1, "C") Then           lngSum = lngSum + Cells(lng2, "D")           If Cells(lng2, "B") <> Cells(lng2 - 1, "B") Then intCount = intCount + 1         Else           Cells(lng2 - 1, "F") = lngSum           Cells(lng2 - 1, "G") = (Int(lngSum * 10 / intCount)) / 10           lng1 = lng2 - 1           Exit For         End If       Next lng2     End If   Next lng1 End Sub '-------マクロコード---------終わり

ramuda7
質問者

お礼

お返事遅くなりまして申し訳ございません 大変参考になりました。 本当にありがとうございますm(__)m

  • zenjee
  • ベストアンサー率47% (50/106)
回答No.2

No.1 zenjeeです。訂正です。  先の回答中、20行目の =IF(AND(C2=C3,B2=B3),"""",C2)     は =IF(AND(C2=C3,B2=B3),"",C2)  に訂正します。  下書きをCopy&Pasteした際に何故か「""」が増えていました。  それとご質問中、斎籐の平均個数「333.3」は「366.6」ですよね。

  • zenjee
  • ベストアンサー率47% (50/106)
回答No.1

 ご質問が「マクロで」ということですから、ご希望の回答からは外れますが、お求めの答えを出すためなら、マクロによらなくてもワークシート関数だけで十分可能と思いますので、アドバイスとしてご参考までにその一連の作業方法を紹介します。気が向いたらお試しになってください。  最初の表が次のとおりとします。   A  B  C  D  E 1 番号 作成日 作成者 作成数 2 10 8/7  斎藤  300 3 11 8/7  斎藤  200 4 12 8/9  斎藤  500 5 13 8/10  斎藤  100 6 14 8/7  山田  100 7 15 8/9  山田  200 8 16 8/10  山田  500 9 17 8/6  渡部  500 10 18 8/7  渡部  400  まず、E列を作業列として、E2に次の計算式を入力しE10までコピーしておきます。 =IF(AND(C2=C3,B2=B3),"""",C2)  すると次のような表になります。(日付が同じ上の「斎籐」が空欄になります)  A    B   C   D   E   F 1番号 作成日 作成者 作成数 2 10 8/7 斎藤 300 3 11 8/7 斎藤 200 斎藤 4 12 8/9 斎藤 500 斎藤 5 13 8/10 斎藤 100 斎藤 6 14 8/7 山田 100 山田 7 15 8/9 山田 200 山田 8 16 8/10 山田 500 山田 9 17 8/6 渡部 500 渡部 10 18 8/7 渡部 400 渡部  次にA1:E10を選択し、データ→集計をクリックします。  「集計の設定」ダイアログボックスが現れますので、グループの基準を「作成者」、集計の方法を「合計」、集計するフィールドは「作成数」にチェック、「集計行をデータの下に挿入する」にチェックし、OKします。すると次の表になります A B C  D E F 番号 作成日 作成者 作成数 1 10 8/7 斎藤 300 2 11 8/7 斎藤 200 斎藤 3 12 8/9 斎藤 500 斎藤 4 13 8/10 斎藤 100 斎藤 5   斎藤 計 1100 6 14 8/7 山田 100 山田 7 15 8/9 山田 200 山田 8 16 8/10 山田 500 山田 9   山田 計 800 10 17 8/6 渡部 500 渡部 11 18 8/7 渡部 400 渡部 12   渡部 計 900 13   総計   2800  ここでF6に次の計算式を入力します。 =ROUND(D6/COUNTIF(E2:E12,E5),1)  なお、この式は小数点2位以下四捨五入の式ですから、切り捨てるときはROUNDDOWNにしてください。  次に表左上名前ボックスの下の「123」とある数字の「2」をクリックします。すると合計行だけが現れますので、この状態でF6を選択し、右クリックでコピー、そのままShift、F13まで選択し、編集→ジャンプをクリックします。「ジャンプ」ダイアログボックスが現れますので、「セル選択」をクリックし、「可視セル」にチェック、OKします。するとF6,10,13が反転状態になりますので、選択セル上で右クリック→貼り付けをクリックします。  そして名前ボックスの下の「3」をクリックすると、合計行だけにお求めの答えが現れます。以上で完了です。

関連するQ&A