• ベストアンサー

EXCELVBAマクロについて特定の月だけ集計方法

ExcelVBAマクロについて確認させてください。 下記の図の通り、8月分の集計を行いたく、9月分は除いて開始日(=2020/8/28)と終了日(=2020/8/31)の行を読み込んで◯の数を集計する方法をご教授くださいm(_ _)m

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

補足に関して。 最上行から、A列のデータが8月かどうか、1行ずつ(終り行まで)調べて行って、最後に出てきた 8月の行を最終行とする。 日付がバラバラに出てくる場合の話。飛び飛びなどでは、全行調べるほかない。 ーー ・・8/1-31,9/1・・ と連続して日付があり、(行的に)月別に上下出てくるなら、9月1日の行を 狙い撃ちして、Findで探し、1行手前(上)の行を8/31とする手(それで正しい場合)もあろう。 質問者のデータ状況や、仕事のことが判らないので、答えが決まらないよ。 そういう場合、ソートして考えてもよい場合は、いろいろ考えられる。 ーー 質問そのものが、8/28日から突然出てくる例で、何を考えているのか、判らゃせんな。

roturtle
質問者

お礼

おかげさまでうまく作動できました。色々とありがとうございました!

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

VBAの勉強のためならば、 例データ A1:C9 ’日 付 山田 木村 2021/8/28 〇 - 2021/8/29 〇 〇 2021/8/30 〇 - 2021/8/31 - 〇 2021/9/1 - 〇 2021/9/2 〇 - 2021/9/3 - - 2021/9/4 - 〇 -は空白セルの替わりの表示。 標準モジュールに Sub test02() For j = 2 To 3 'B列とC列データについて Cells(3, j + 10) = Cells(1, j) '第1行は名前 n = 0 For i = 2 To 15 If Month(Cells(i, 1)) = 8 And Cells(i, j) = "〇" Then n = n + 1 End If Next i Cells(4, j + 10) = n Next j End Sub ーー 実行結果 J3:M4 山田 木村 3 2 条件の判定の行は If Cells(i, 1) >= #8/1/2021# And Cells(i, 1) <= #8/31/2021# And Cells(i, j) = "〇" Then でもOK。 > For i = 2 To 15の15は 、実態に合わせて相対化するなら、「VBA 最終行 取得」でWEBで調べてください(略)。

roturtle
質問者

補足

回答ありがとうございます(^^) 追伸させてくださいm(__)m 2020/8の最終行を取得するプログラムはどうやればいいでしょうか?

  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.2

関数だと =SUMPRODUCT((MONTH(A2:A100)=8)*(B2:B100="◯")) でいけます。

  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.1

8月分の○をカウントします。○はセルに入れている○をコードに記載してください。 日付がA2から○はB2から始まっているとして Sub Test() Dim LastRow As Long Dim mCount As Long Dim i As Long mCount = 0 LastRow = Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To LastRow If Month(Cells(i, "A").Value) = 8 And _ Cells(i, "B").Value = "◯" Then mCount = mCount + 1 End If Next Range("C2").Value = mCount End Sub

roturtle
質問者

お礼

こんなやり方があったんですね。おかげさまでうまく作動しました。ありがとうございました。

関連するQ&A