2017-05-08 2 views
1

私は数日間この戦闘を戦ってきました。私が最後にVBAを使用して以来、しばらくしていて、私は覚えがたいです。VBAの行全体に渡る数字の連続した「文字列」の数をカウントする機能

1つの行の 'ツアー'または中断されていない '文字列'の数を検索すると、

データと、私が探しています答えは(各番号は独自の列にあると)これを次のとおりです。

Function TOURCOUNT(TourList As Range) 
Dim var As Variant 

var = TourList.Value 

For Each var In TourList 
    If var = 1 And var + 1 = 1 Then 
    TOURCOUNT = TOURCOUNT 
    ElseIf var = 1 Then 
    TOURCOUNT = TOURCOUNT + 1 
    End If 
Next 

End Function 

そして、ちょうどセルを介して実行されている:

0 0 1 1 1 0 1 0 1 = 3 
1 0 0 0 0 0 0 0 0 = 1 
0 0 0 0 1 1 1 1 1 = 1 

は、以下の機能を試してみました:

​​

その他の小さな変形です。明らかに私は何かを正しく理解していません。 'And'は、誤って列の代わりに行をオフセットした場合、Offset if文が誤った数値を返すことを評価します。しかし、私がそれを訂正すると、ただ0が返されます。

何か助けていただければ幸いです!

ありがとうございました!

答えて

0

私はあなたが何をしようとしているのかは分かりませんが、あなたの例から判断すると、このようなことが仕事をするでしょう。

一般に、範囲をパラメータとして渡すと、その行に入り、ループ内で2つのチェックを行います。両方のチェックが成功すると、lngResultがインクリメントされます。

enter image description here

Option Explicit 

Public Function Uninterrupted(rngRange As Range) As Long 

    Dim rngCell   As Range 
    Dim lngResult  As Long 
    Dim blnInterruped As Boolean 

    For Each rngCell In rngRange 
     If rngCell Then 
      If Not blnInterruped Then lngResult = lngResult + 1 
      blnInterruped = True 
     Else 
      blnInterruped = False 
     End If 
    Next rngCell 

    Uninterrupted = lngResult 

End Function 
+0

私は必要な正確に何であることをありがとう! – TessaB

+0

@TessaB - クール! :) – Vityata

+1

全体の範囲をチェックしているので、関数をvolatileにする必要はありません。 – Rory

関連する問題