- ベストアンサー
VBAで表の特定の条件に基づいて計算する方法
- VBAを使用して、特定の条件に基づいて表の計算を行う方法を教えてください。
- 具体的には、与えられた表の特定の列の値を比較し、条件に合致する件数を新しいシートに書き出したいです。
- 現在の実装ではうまく処理されず、どのようなVBAコードを書けば良いかわかりません。お手数ですが、ご教示いただけますと幸いです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 こんな感じです。 Sub count() Dim st1 As Worksheet Dim st2 As Worksheet Set st1 = ActiveWorkbook.Sheets("Sheet1") Set st2 = ActiveWorkbook.Sheets("Sheet2") Dim maxRow As Long maxRow = st1.Range("A65536").End(xlUp) '格納最大行数 Dim case1Cnt As Long Dim Case2Cnt As Long '先頭行から格納最大までチェックする case1Cnt = 0 Case2Cnt = 0 Dim row As Long For row = 1 To maxRow 'i行の値よりi+1行の値が大きく、i+1行の値よりi+2行目の値が大きい件数 If (row + 2) <= maxRow Then If st1.Cells(row, 1) < st1.Cells(row + 1, 1) And _ st1.Cells(row + 1, 1) < st1.Cells(row + 2, 1) Then case1Cnt = case1Cnt + 1 End If End If 'i行の値よりi+1行の値が大きく、i+1行の値よりi+2行目の値が大きく、i+2行の値よりi+3行目の値が大きい件数 If (row + 3) <= maxRow Then If st1.Cells(row, 1) < st1.Cells(row + 1, 1) And _ st1.Cells(row + 1, 1) < st1.Cells(row + 2, 1) And _ st1.Cells(row + 2, 1) < st1.Cells(row + 3, 1) Then Case2Cnt = Case2Cnt + 1 End If End If Next row '結果表示 st2.Cells(1, 1) = "CASE 1" st2.Cells(1, 2) = case1Cnt st2.Cells(2, 1) = "CASE 2" st2.Cells(2, 2) = Case2Cnt Set st1 = Nothing Set st2 = Nothing End Sub
お礼
一行目がタイトルになっているので、rowは2から始めると良いみたいです。 深夜にもかかわらず、素晴らしいプログラム、ありがとうございます! 助かります!!