| 
    
     |  | ▼いちご さん: こんにちは。
 以下のご説明でだいたいわかりました。
 
 >エクセルのファイルに元データシート、日集計シート、1ヶ月分日別集計シート等が有
 >1ヶ月日別集計のシートのVBAを知りたかったんです
 >データは番号と日付で管理されています
 >このデータはロータス123をフロッピーに落とし
 >エクセルにマクロで貼り付けて作業しています
 >何分、前任者がVBAばりばり出来たみたいで(もう、いてませんが)
 >無知な私にはまったくもってわかりません
 >知ってる関数SUMとかRANGEならわかるんですが。。。
 >元データシートはこんな感じです
 元データシート(以下のデータが入っているシート名とします)は、
 実際には、管理番号と配合の間に色んなデータが入っているということですね?
 
 >月 日 管理番号・(略)・ 配合・・(略)
 >09 01 2000       C
 >09 01 2001       C
 >09 01 2002       C
 >09 01 2003       C
 >09 02 2004       B
 >09 02 2005       C
 今回は、この元データシートはA列が月、B列が日、C列が管理番号、D列が配合とします。シート名は「元データシート」とします。
 
 手順としては、新規ブックに上記のデータを例として、元データシートに作成して下さい。
 
 
 次に別のシートをアクティブにして、以下のコードを実行して下さい。
 
 '====================================================================
 Sub アクティブシートを1ヶ月分日別集計シートにする()
 With ActiveSheet
 .Name = "1ヶ月分日別集計シート"
 .Range("a:a").NumberFormatLocal = "##日"
 .Range("b1:g1").Value = Array("管理番号個数", "A", "B", "C", "SC", "配合計")
 Range("a2").Value = 1
 Range("a2").AutoFill Destination:=Range("A2:A32"), Type:=xlFillSeries
 End With
 End Sub
 
 アクティブシートを「1ヶ月分日別集計シート」として、作成します。
 ここで、確認していただくのは「1日」、「2日」・・・のセルの書式です。
 このセルを数式内で使用しますから、数値として認識してくれる書式にしました。
 
 
 次に集計したい日のセルを選択してして以下のコードを実行して下さい。
 
 '==================================================================
 Sub 行の日付の日計集計()
 Dim rw As Long
 Dim rng As Range
 Dim wk As String
 Dim calad As String
 rw = ActiveCell.Row
 With Worksheets("元データシート")
 Set rng = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp))
 '↑元データのデータ範囲をA列を基準に取得する
 If rng.Row = 1 Then '元データシートにデータが無い
 MsgBox "データなし"
 calad = ""
 end
 Else
 calad = rng.Offset(0, 1).Address(, , xlR1C1, True)
 End If
 End With
 With Worksheets("1ヶ月分日別集計シート")
 wk = rng.Offset(0, 2).Address(, , xlR1C1, True)
 .Cells(rw, 2).FormulaArray = "=SUM(IF(FREQUENCY(IF(" & calad & "=r" & rw & "c1," & wk & ",0),IF(" & _
 calad & "=r" & rw & "c1," & wk & ",0))>0,1,0))-IF(SUM(IF(" & _
 calad & "<>r" & rw & "c1,1,0))>0,1,0)"
 '   ↑管理番号個数の計算(重複を個数に入れない計算をしています)
 wk = rng.Offset(0, 3).Address(, , xlR1C1, True)
 .Range(.Cells(rw, 3), .Cells(rw, 6)).Formula = "=SUMPRODUCT((" & calad & "=r" & rw & "c1)*(" & _
 wk & "=r1c))"
 '   ↑各項目(A,B,C,SC)の個数の計算
 .Cells(rw, 7).Value = "=sum(c" & rw & ":f" & rw & ")"
 '    ↑配合合計
 End With
 End Sub
 
 「1ヶ月分日別集計シート」の集計結果は、全て数式ですから、数式と各セルの関係を
 整理してみて下さい。
 
 実際の運用時にセルの位置が変わった場合、コードをどのように変更すればよいか
 は、数式とコードを良く見比べて下さい。
 
 
 |  |