2017-06-13 46 views
1

在「V34:V99」列中,散列順序中有數字1,2,3,0。 我想統計有多少情況(n)(連續三次1 к=3,未考慮零),如果發生2或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'範圍內或在全行?因爲現在你正在檢查整行('parRange.Rows')。如果這是正確的,那麼我認爲通過使用'For Each Cell In parRange.Rows',您可以按列獲得單元格,即「A34,A35,A36,...,A99,B34,B35 ...」。 –

+0

你也可以通過用'ElseIF Cell.Value = 2或3'替換'End If,如果Cell.Value = 2或3'來避免額外的if語句。我也不確定Or語句是這樣工作還是你應該寫'Cell.Value = 2或Cell.Value = 3' – Luuklag

+0

@Luuklag,Cell.Value = 2或Cell.Value = 3幫助,現在所有的作品。非常感謝 ! – maxim465

回答

0

你不能以這種方式使用Or聲明。您應該使用Cell.Value = 2 Or Cell.Value = 3您也可以保存自己的If聲明,請參閱下面的更新的代碼:

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