Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


63604 / 76738 ←次へ | 前へ→

【17729】Re:VBA、超初心者です。ゴメンなさい・・・
回答  ichinose  - 04/9/6(月) 17:57 -

引用なし
パスワード
   ▼いちご さん:
こんにちは。
以下のご説明でだいたいわかりました。

>エクセルのファイルに元データシート、日集計シート、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ヶ月分日別集計シート」の集計結果は、全て数式ですから、数式と各セルの関係を
整理してみて下さい。

実際の運用時にセルの位置が変わった場合、コードをどのように変更すればよいか
は、数式とコードを良く見比べて下さい。
0 hits

【17627】列にある文字データを文字別に数えるには... いちご 04/9/3(金) 17:18 質問
【17634】Re:列にある文字データを文字別に数えるに... ichinose 04/9/3(金) 19:37 発言
【17640】Re:列にある文字データを文字別に数えるに... ichinose 04/9/3(金) 20:23 発言
【17704】Re:列にある文字データを文字別に数えるに... Jaka 04/9/6(月) 9:09 回答
【17706】Re:列にある文字データを文字別に数えるに... いちご 04/9/6(月) 9:16 お礼
【17710】Re:列にある文字データを文字別に数えるに... ichinose 04/9/6(月) 12:03 発言
【17716】VBA、超初心者です。ゴメンなさい・・・ いちご 04/9/6(月) 13:47 質問
【17729】Re:VBA、超初心者です。ゴメンなさい・・・ ichinose 04/9/6(月) 17:57 回答

63604 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free