- 締切済み
日別の自動集計について
EXCEL2007を使用しています。 下記のような表1を日別で結果1のように集計をしたいのですがやり方を教えて頂けますと助かります。B列は月が変わると5月になるので可能であれば自動で表1から結果1に月が変わっても集計できたらと思っています。よろしくお願い致します。 表1 結果1 A B C 月日 内容 男 女 1 家事 4月1日 男 4月1日 家事 2 2 家事 4月1日 男 4月1日 バイト 1 3 家事 4月2日 女 4月1日 旅行 1 4 バイト 4月1日 男 4月2日 家事 1 5 バイト 4月2日 女 4月2日 バイト 1 6 旅行 4月1日 女
- みんなの回答 (4)
- 専門家の回答
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
ピボットテーブルを使えば、「更新する」をクリックするだけで完了する可能性があります。 バカげているとは思いますが数式希望ということなので D2セル 項目の連結 =A2&C2&"_"&B2 下へオートフィル E2セル 日付の数を数える =B2*10000+COUNTIF($B$2:B2,B2) 下へオートフィル G2セル 重複の処理 =INDEX($D$2:$D$9,SMALL(IF(MATCH($D$2:$D$9,$D:$D,0)=ROW($D$2:$D$9), ROW($D$2:$D$9)-1),ROW(G1))) [Ctrl]+[Shft] +[Enter] で確定、配列数式。{ }で挟まれる 下へオートフィル H2セル 日付の抜き出し =IF(ISERR(G2),"",IF(G2="_","",MID(G2,FIND("_",G2)+1,5)*1)) 下へオートフィル I2セル 日付を昇順に並び替え =IF(COUNT(H:H)<ROW(A1),"",SMALL(H:H,ROW(A1))) 下へオートフィル J2セル 内容の検索 =IF(I2="","",INDEX(A:A,MATCH(I2*10000+COUNTIF($I$2:I2,I2),E:E,0))) 下へオートフィル K2セル 集計 =IF($I2="","",SUMPRODUCT(($B$2:$B$9=$I2)*($A$2:$A$9=$J2)*($C$2:$C$9=K$1))) 右へ下へオートフィル
- watabe007
- ベストアンサー率62% (476/760)
マクロが使えるのならお試し下さい。 【結果1】をG1セルに書き出します。 Sub Test() Dim myDic As Object Dim c As Range, myStr As String Dim d As Variant, tmp As Variant Dim i As Long Set myDic = CreateObject("Scripting.Dictionary") For Each c In Range("B1", Cells(Rows.Count, "B").End(xlUp)) myStr = c.Value & ";" & c.Offset(, -1) If Not myDic.Exists(myStr) Then If c.Offset(, 1).Value = "男" Then myDic(myStr) = Array(1, "") Else myDic(myStr) = Array("", 1) End If Else tmp = myDic(myStr) If c.Offset(, 1).Value = "男" Then tmp(0) = tmp(0) + 1 Else tmp(1) = tmp(1) + 1 End If myDic(myStr) = tmp End If Next ReDim v(1 To myDic.Count, 1 To 4) For Each d In myDic.keys i = i + 1 v(i, 1) = Split(d, ";")(0) v(i, 2) = Split(d, ";")(1) v(i, 3) = myDic(d)(0) v(i, 4) = myDic(d)(1) Next '結果1をG1セルに書き出します。 With Range("G1") 'G:J列を消去 .EntireColumn.Resize(, 4).ClearContents .Resize(, 4).Value = Array("月日", "内容", "男", "女") .Offset(1).Resize(i, 4).Value = v .CurrentRegion.Sort _ Key1:=.Cells, Order1:=xlAscending, Header:=xlYes End With Set myDic = Nothing End Sub
- viva123
- ベストアンサー率41% (7/17)
集計の方法の一つですが、ピボットテーブルをつかえば 簡単に集計が出来ます ちょっと慣れていないと、とっつきにくいのですが・・・ データメニューのピボットテーブルとピボット・・・を選び 表1を範囲指定します。(範囲さえ指定していれば後は次へ次へと画面を進めていくと、 空の表とピボットテーブルのフィールドとが表示されます。このフィールドを空の表にドラッグします。) 行のフィールドに日付をドラッグしその右側に(同じ行フィールド)に内容をドラッグします。 列のフィールドに性別をドラッグ。 データアイテムに性別を再度ドラッグ。 すると自動的にデータの個数を集計します。 日ごとの集計がいらない場合は、 1つの日ごとの集計行の左端をクリックすると集計行のみが全て選択されます。 そこでショートカットメニュー(範囲指定した状態で、右ボタンクリック。) を出して表示しないにすると見やすくなりますよ! ピボットって使えると結構便利ですよ!
お礼
ご回答有難うございます。ピボットテーブルを勉強中です。教えて頂いた「行のフィールドに日付をドラッグしその右側に(同じ行フィールド)に内容をドラッグします。」の操作がよくわかりません。 もう少し勉強してみます。
補足
ご回答有難うございます。 ピボットテーブルを使用したことがなくて使おうとしてもよく分かりませんでした。 2段階の集計になってもよいので計算式を使ってやる方法があるといいのですが、計算式だと複雑になりますか? ピボットテーブルを使いこなせば簡単かもしれませんが別の方にも使って頂きたいので覚えてもらうのが大変かなと思っています。
補足
数式よりもピボットテーブルを使用した方が簡単というご指導頂きましたので勉強してピボットテーブルを使ってみたいと思います。EXCEL2007で列に月日、内容、性別のラベルを並べることができません。 もう少し勉強してみたいと思います。