プロが教える店舗&オフィスのセキュリティ対策術

以下のような表があります。
(sheet1)
A列
不規則な数列(←一行目にタイトルが書き込まれています)
13   (←二行目から数字がランダムに書き込まれています)   
18
44
36
22
14
27
21
32
35
44
12
(以下続く)

Case1[i行の値よりi+1行の値が大きく、i+1行の値よりi+2行目の値が大きい件数]
Case2[i行の値よりi+1行の値が大きく、i+1行の値よりi+2行目の値が大きく、i+2行の値よりi+3行目の値が大きい件数]
などの件数を、新たなシートに書き出したいのです。
上の例からすると、
(sheet2)
A列  B列(←B列に件数を書き込む)
Case1  3
Case2  1

のような感じです。
if文で作ってみたのですが、うまく処理してくれません。
どのようなVBAを書けばいいのでしょうか。
分かる方、よろしくお願いします。

A 回答 (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
    • good
    • 0
この回答へのお礼

一行目がタイトルになっているので、rowは2から始めると良いみたいです。
深夜にもかかわらず、素晴らしいプログラム、ありがとうございます!
助かります!!

お礼日時:2007/05/23 00:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!