
Excelで以下のような集計データがあります。1週間毎にカテゴリーでまとめたいのですが、マクロで集計できないでしょうか?
aa bb cc dd
9/27 0 2 0 4
9/28 4 52 41 1
9/29 6 0 1 13
9/30 2 0 1 0
10/1 1 0 1 0
10/2 0 0 3 0
10/3 0 5 1 0
10/4 2 1 0 0
10/5 3 61 1 11
10/6 0 1 31 3
10/7 6 0 1 0
10/8 0 2 1 5
10/9 8 3 31 4
10/10 0 1 1 0
10/11 3 1 1 0
10/12 5 0 5 4
<集計結果1>
※単純に週ごとに集計した結果
aa bb cc dd
1週目 13 59 48 18
2週目 19 69 66 23
3週目 8 1 6 4
<集計結果2>
※1週目からの延べ合計
aa bb cc dd
1週目 13 59 48 18
2週目 32 128 114 41
3週目 40 129 120 45
できれば、1回で集計結果2(1週目からの延べ合計)を出したいと思っていますが、集計結果1を関数で合計し、集計結果2を出したいと思っています。
No.4ベストアンサー
- 回答日時:
VBAである日付が第何週かを取得するには「DatePart("ww",<日付>)」を使います。
http://officetanaka.net/excel/vba/function/DateP …
あとは以前の質問の回答4の方のコードを参考にすれば、いいのでは?
http://questionbox.jp.msn.com/qa5308829.html
たとえば
>ReDim sumAry(30000 To 50000, 0 To 2)
を
ReDim sumAry(1 To 54, 0 To 4)
と変更して、sumAry(1,1)には第1週のbb列の合計、sumAry(1,2)には、第1週のcc列の合計・・・を格納できるようにしておき、
>For i = 1 To UBound(orgAry, 1)
> If sumAry(orgAry(i, 2), 0) = 0 Then
> sumAry(orgAry(i, 2), 0) = 1
> dayCnt = dayCnt + 1
> End If
> Select Case orgAry(i, 1)
> Case "OK": sumAry(orgAry(i, 2), 1) = sumAry(orgAry(i, 2), 1) + 1
> Case "NG": sumAry(orgAry(i, 2), 2) = sumAry(orgAry(i, 2), 2) + 1
> End Select
> Next i
を
Dim weekCnt As Integer, wkNo as Integer, k As Integer
For i = 2 To UBound(orgAry, 1)
wkNo = DatePart("ww,"orgAry(i, 1))
If sumAry(wkNo, 0) = 0 Then
sumAry(wkNo, 0) = 1
weekCnt = weekCnt + 1
End If
For k = 1 To 4
sumAry(wkNo, k) = orgAry(i, k+1)
Next k
Next i
というふうにするとか。
#考え方を示しただけで動作を確認したコードではありません、あしからず。
先の回答を理解されていれば、他の部分も問題なく変更できるはずです。
もしもそれが無理なら、ピボットテーブルを活用することをお奨めします。
No.3
- 回答日時:
第何週目の定義が質問にはっきりさせてないと思うが。
(1)年初来の第何週
(2)月初来の第何週
(3)データの最初から7日単位で
ーー
(1)で考えると、関数では使えるWEEKNUM関数(ただし2003まではアドイン関数)がVBAでは使えないようなので
'--下記関数テスト用(A列に連続日付を入れてテスト確認用)
Sub test01()
For i = 2 To 365
Cells(i, "g") = weeknums(Cells(i, "A"))
Next i
End Sub
’---実際の関数
Function weeknums(b As Date)
d1 = Weekday(DateSerial(Year(b), 1, 1))
d2 = DateSerial(Year(b), 1, 1)
d3 = b
wn = Int((d3 - d2 - (8 - d1)) / 7) + 2
weeknums = wn
End Function
を使う。
------
A列は日付順に並び、日付シリアル値の形式でデータが入っているとする。
直前行の修番号、計数項目だけ中間合計算出用の変数を(質問例では4つ)用意する。
ーー
データ最初行から最終行まで以下を繰り返す
上記私製関数でA列の日付の週番号を算出し、直前行の週番号と(IF文で)変わったか判別する。
変われば中間合計4つの変数の値を、データとは別範囲の行に代入(転記)する。
転記する行ポインターを(次週に備えて)+1する。
そして4変数をクリア(ご破算)
そして今の行の4データを中間合計算出用の変数に加える。
また「直前行の週番号を記録する変数」を、現在行の数に置き変える。
ー
変わらない場合は、その行の4列のデータを、それぞれの中間合計算出用の変数に加える。
次の行を指して、以上を最終行まで繰り返す。
ーー
最封行のあと、中間合計4つの変数の値を、データとは別範囲の行に代入(転記)する。
ーーー
(2)(3)の場合も上記私製関数は使わないが(判別パターンのコードは変わるが)、その後の足しこみは同じパターンでよい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでアクセスDBからデータの取...
-
【VB.NET】Excelの最終行までの...
-
富士通(汎用機)のAIMについて
-
access vba 『○○件づつ表示』を...
-
VB2010で、選択した系列を最前...
-
VBA 変数名に変数を使用したい。
-
Redim とEraseの違いは?
-
VB.NETにて、構造体へデータを...
-
『列名 '担当者CD' があいま...
-
VB6.0の「vbFromUnicode」はVB....
-
VB.NETでのAccessテーブルリンク
-
MDBをADO接続でINSERT・UPDATE...
-
[C#] DataGridViewでコンボボッ...
-
INT64対応のprintf系関数はあり...
-
EXCELのVBAでLenB関数について
-
2つ目のレコードの値を取得す...
-
2次元配列でウォッチが出来ない
-
ワークテーブルの作成について
-
ADOでNullフィールドの抽出
-
手動または分散トランザクショ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【ExcelVBA】値を変更しながら...
-
VBAコンボボックスの内容が反映...
-
VBAでアクセスDBからデータの取...
-
【C#】textBoxの指定行のデータ...
-
「Nullの使い方が不正です」の...
-
C# DataTableに最後に追加した...
-
【VB.NET】Excelの最終行までの...
-
VB2010で、選択した系列を最前...
-
非同期のプロセス間通信(パイプ...
-
COBOL数値転記の仕様
-
エクセルのマクロ コンボボッ...
-
エクセルのセル最終行取得
-
ListViewで表示されたデータの...
-
クリスタルレポートでレコード...
-
Excel VBAで1週間毎にカテゴリ...
-
アクセスでウェブ上のデータを...
-
エクセルのCSV読み込みについて
-
[リボンのキーボード ショート...
-
Web画面のTableから数字を取得...
-
Excel VBAでフォルダ内の全テキ...
おすすめ情報