[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『日付毎の集計と合計値の抽出』(MoonMan)
初めて質問させていただきます。
表題の質問ですが、CSVをADOでsheetに抽出後の展開で悩んでます。
本当は、CSVの抽出で一気にフィルタリングをかけて抽出したかたっのですが、
力不足で以下のような列で抽出しました。
A)ユーザ・日付・相手方(CD)・対応時間(秒)
センター#1 200910121829 7051 55
このシートを
B)集計日付・発信回数・発信通話時間
という表組みに集計しようとしています。
仕様としては、
1)日付は日次レベルでグループ化しする
2)開始日と終了日を別のシート(セル)から値を求める
2)日付毎で配列化し、その行数を求めて積算し、指定のセルに書き出す。
3)その配列の秒数を積算し、時間の単位で指定のセルに書き出す。
4)1時間に満たない場合は、00:NNとする。
5)データのない日付は、0で書き出す
そこで、以下のコードを書き始めています。 - - - - Sub 仕訳集計() Dim ユーザ() As String Dim 日付() As String Dim 相手先() As String Dim 対応時間() As Integer Dim 集計日付() As String Dim 開始日(d, 1)
日付最終行 = Worksheet("sheet1").Cells(65536, 2).End(xlUp).Row
ReDim 日付(日付最終行 + 1) ReDim 相手方(日付最終行 + 1) ReDim 対応時間(日付最終行 + 1)
For i = 1 To 最終行 If Cells(i, 2).Value Then 日付(i) = Worksheet("sheet1").Cells(i, 2).Value Else 日付(i) = 日付(i - 1) End If 相手方(i) = Cells(i, 3).Value 秒数(i) = Cells(i, 4).Value Next 'ループした配列をグループ化して加工する 集計日 = Worksheet("集計結果").Range(A1).Cells(2.1) 発信回数 = Worksheet("集計結果").Range(A1).Cells(2.2) 発信通話時間 = Worksheet("集計結果").Range(A1).Cells(2.3) 着信回数 = Worksheet("集計結果").Range(A1).Cells(2.4) 着信時間 = Worksheet("集計結果").Range(A1).Cells(2.5) 開始月 = Worksheet("メイン画面").Cells(L15) '開始日 = Worksheet("メイン画面").Cells(Q15) 固定化するほうがよい 終了月 = Worksheet("メイン画面").Cells(X15) 終了日 = Worksheet("メイン画面").Cells(AC15) d = 1 For d = 1 To 終了日 If 日付(i) = d Then 'グループ化してカウント '行数の値を書き出し '秒数を時間に変換積算して書き出し 'オフセットして書き出し 'ループする End If Next
とここまでは、考えましたが、煮詰まってしまいました。
どなたかすっきりした考え方をご教示ください。
Excel2003で作成しています。
回答が無いようなので軽くコメントを…… まず、仕様を見る限り集計部分はCOUNTIFやSUMIFなどの数式だけで出来そうな気がしますけども、 あくまでもマクロで処理しないと駄目なんですかね。 開始、終了の日付範囲が数式だけだと難しいかもしれないから、 そこはマクロで組むにしても、 集計だとかは表計算ソフトであるExcelさんの得意分野だと思うので、 マクロでわざわざ組むのが面倒というか勿体無いと言うか…… (ご近所PG)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.