|
▼TOKU さん:
こんばんは。
>
>まず、ユーザーが区分の列にA〜Cを入力しその後、内容を入力し時間を
>分単位で入力します。
>最後に集計したい時にボタンを押すと集計結果の『時間』のセルに合計した時間を
>表示させたいです。
>※時間のセルには、予めセルの書式のユーザー定義で「##0"分"」等と定義してあります。
でしたら、
>>これらの設定がなされていれば、
>>
>>1 区分で並べ替え
>>
>>2 「データ」---「集計」とクリックし、「集計の設定」ダイアログで
>> グループの基準----区分
>> 集計の方法------- 合計
>> 集計するフィールド---時間
>>
>>と言う指定で集計を行うと、区分別の時間の合計が集計されます。
これで算出できると思いますが・・・。
方法は、他にいろいろありますが・・・。
>
>>>区分 内容 時間 【集計結果】
>>> A 5分 区分 時間
>>> B 10分 A
>>> A 2分 B
>>> B 3分 C
>>> C 4分
>>> C 4分
>>> ・ ・
>>> ・ ・
この元データがSheet1という名前の付いたシートの
A1からデータが入っているとします。
(A列--区分、B列---内容、C列---時間 但し、1行目は見出し)
また、集計結果は、Sheet2という名前の付いたシートの
セルA1から、以下のレイアウトで表示することを考えます。
(A列--区分、B列---時間 但し、1行目は見出し)
区分 時間
A 7分
B 13分
C 8分
では、コードです。
標準モジュールに
'====================================================================
Sub main()
Dim sh1rng As Range
Dim sh2rng As Range
Dim s1hani As String
Dim s1goukei As String
With Worksheets("sheet1")
Set sh1rng = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
End With
Worksheets("sheet2").Cells.ClearContents
sh1rng.AdvancedFilter xlFilterCopy, , Worksheets("sheet2").Range("a1"), True
With Worksheets("sheet2")
.Range("B1").Value = "時間"
Set sh2rng = .Range("a2", .Cells(.Rows.Count, 1).End(xlUp))
If sh2rng.Row > 1 Then
s1hani = sh1rng.Offset(1, 0).Resize(sh1rng.Rows.Count - 1, 1).Address(, , , True)
s1goukei = sh1rng.Offset(1, 2).Resize(sh1rng.Rows.Count - 1, 1).Address(, , , True)
sh2rng.Offset(0, 1).NumberFormatLocal = "##0""分"""
sh2rng.Offset(0, 1).Formula = "=sumif(" & s1hani & ",a2," & s1goukei & ")"
End If
End With
End Sub
mainを実行してみてください。
|
|