• ベストアンサー

ExcelVBAマクロで日付指定してのカウント方法

ExcelVBAマクロについて確認させてください。 下記の図の通り、開始日(=2021/4/1)と終了日(=2021/4/5)を読み込んで 出欠表から開始日(=2021/4/1)から終了日(=2021/4/5)まで「参加」のみ カウントして表示する方法をご教授くださいm(__)m

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.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% (1719/2589)
回答No.1

セルの位置が分かりませんが 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 これで試してみてください。