2017-06-13 14 views
1

"V34:V99"列には、1,2,3,0の桁が散在しています。 2つまたは3つが発生した場合は、どれくらい多くの状況(n)(0を考慮せずに3つの連続した1つのк=3)をカウントしたいとしたら、k=o。 私はコードを書いたが、うまくいきませんでした(多くの状況(n)を与えません)。MsgBoxは値を与えません

0 
1 
0 
1 
0 
0 
0 
1 
0 
1 
0 
0 
0 
0 
1 
0 
0 
1 
0 
0 
1 
0 
0 
1 
0 
0 
1 
0 
0 
0 
1 
0 
0 
0 
0 
3 
0 
1 
0 
3 
0 
0 
0 
3 
0 
1 
0 
1 
0 
0 
1 
3 
0 
1 
0 
0 
0 
0 
0 
0 
0 
0 
0 
0 
0 
0 

コードは

Sub а33условие3() 

    Dim k, n As Integer 
    Dim parRange As Range 

    Set parRange = Range("V34:V99") 
    k = 0 
    n = 0 
    For Each Cell In parRange.Rows 

     If Cell.Value = 1 Then 
      k = k + 1 
      If k = 3 Then 
       n = n + 1 
       k = o 
       MsgBox n 
      End If 
     End If 
     If Cell.Value = 2 Or 3 Then 
      k = 0 
     End If 
    Next Cell 

End Sub 
+0

あなたは 'V34の値をチェックしますか::V99'範囲または全行であなたは、自分でIf文を保存し、以下の更新されたコードを見ることができます。またCell.Value = 2 Or Cell.Value = 3を使用する必要がありますか?今は完全な行をチェックしているので( 'parRange.Rows')。これが正しければ、 'For each Cell In parRange.Rows'を使って、' A34、A35、A36、...、A99、B34、B35、... 'という列でセルを取得すると思います。 –

+0

また、 'End If、If Cell.Value = 2 Or 3'を' ElseIF Cell.Value = 2 Or 3'で置き換えることによって余分なif文を避けることもできます。また、Or文がこのように動作するかどうかわかりません。 'Cell.Value = 2 Or Cell.Value = 3'と書くべきです。 – Luuklag

+0

@Luuklag、Cell.Value = 2、またはCell.Value = 3が役に立ちます。どうもありがとう ! – maxim465

答えて

0

あなたは、このようにOrステートメントを使用することはできません。

Sub а33условие3() 

Dim k, n As Integer 
Dim parRange As Range 

Set parRange = Range("V34:V99") 
k = 0 
n = 0 
For Each Cell In parRange.Rows 

    If Cell.Value = 1 Then 
     k = k + 1 
     If k = 3 Then 
      n = n + 1 
      k = o 
      MsgBox n 
     End If 
    ElseIf Cell.Value = 2 Or Cell.Value = 3 Then 
     k = 0 
    End If 
Next Cell 

End Sub 
関連する問題