- 締切済み
集計について
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 この様な表なのですが
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- e10go
- ベストアンサー率38% (47/122)
少し遅くなりましたが、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 '-------マクロコード---------終わり
- zenjee
- ベストアンサー率47% (50/106)
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)
ご質問が「マクロで」ということですから、ご希望の回答からは外れますが、お求めの答えを出すためなら、マクロによらなくてもワークシート関数だけで十分可能と思いますので、アドバイスとしてご参考までにその一連の作業方法を紹介します。気が向いたらお試しになってください。 最初の表が次のとおりとします。 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」をクリックすると、合計行だけにお求めの答えが現れます。以上で完了です。
お礼
お返事遅くなりまして申し訳ございません 大変参考になりました。 本当にありがとうございますm(__)m