- ベストアンサー
ExcelVBAマクロで日付指定してのカウント方法
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>VBAdeで どういう方法やロジックでやるのをお望みか判らない。 関数でもできそうな課題ではない? ーーー それで、あえてVBAで関数Countifsを利用してやってみた。 データの事後の変化についていけないが。 例データ A1:C15 aを出席、bを欠席という文字列と考えてください。 データ作成(日付の出現並び)に不自然な点があるが、お許しを。 A列の日付は日付シリアル値であること。 日付 山田 田中 2021/3/28 a a 2021/3/31 b a 2021/4/1 b b 2021/4/3 a a 2021/4/5 a a 2021/4/7 b b 2021/4/9 b b 2021/4/11 b b 2021/5/1 a a 2021/5/2 a b 2021/5/3 b b 2021/4/5 a a 2021/4/6 a a 2021/4/7 b b ーー 標準モジュールに Sub test01() For c = 2 To 3 Cells(17, c) = Application.WorksheetFunction.CountIfs(Range("A2:A15"), ">=2021/4/1", Range("A2:A15"), "<=2021/4/10", Range(Cells(2, c), Cells(15, c)), "a") Next c End Sub ーーー 結果 4月のa の数を数えて B,C列、第15に結果 4 4 ーー ピボット・テーブルなどでできそうだ。
その他の回答 (1)
- kkkkkm
- ベストアンサー率66% (1733/2603)
セルの位置が分かりませんが 2021/3/29のセルがA3だとして 山田さんと田中さんの名前の上のセルB1とC1にそれぞれ回数を出します。 Sub Test() Dim LastRow As Long Dim mRow As Long, mCol As Long, mCount As Long For mCol = Columns("B:B").Column To Columns("C:C").Column mCount = 0 For mRow = 3 To Cells(Rows.Count, "A").End(xlUp).Row If Cells(mRow, "A").Value >= Range("E1").Value And _ Cells(mRow, "A").Value <= Range("E2").Value And _ Cells(mRow, mCol).Value = "参加" Then mCount = mCount + 1 End If Next Cells(1, mCol).Value = mCount Next End Sub これで試してみてください。