【问题标题】:Count number of unbroken 'strings' of numbers across a row in VBA Function在 VBA 函数中计算一行中完整的数字“字符串”的数量
【发布时间】:2017-10-06 02:18:38
【问题描述】:

我已经为此奋斗了好几天,显然我错过了一些东西。自从我上次使用 VBA 以来已经有一段时间了,我很难记住。

希望在一行中找到 1 的“游览”或不间断的“字符串”的数量。

我正在寻找的数据和答案是这样的(每个数字都在自己的列中):

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

试过以下功能:

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

而且只是穿过细胞:

Function NTOURS(TList As Range)

Dim var As Variant

For Each Cell In TList
    If Cell.Offset(0, 1).Value = 1 And Cell.Value = 1 Then
        NTOURS = NTOURS + 1
    End If
Next
End Function

还有其他一些小的变化。显然我没有正确理解某些事情。当我不小心偏移行而不是列时,'And' 评估 Offset if 语句返回了错误的数字。但是当我纠正它时它只返回 0。

任何帮助将不胜感激!

谢谢!

【问题讨论】:

    标签: vba excel range offset


    【解决方案1】:

    我不确定你想要做什么,但从你的例子来看,这样的事情会起作用。

    通常,您将范围作为参数传递,它进入行并在循环中进行两次检查。如果两个检查都成功,lngResult 会增加。

    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
    

    【讨论】:

    • 谢谢你,这正是我需要的!
    • 既然你已经通过了被检查的整个范围,你不需要让函数变得易变。
    猜你喜欢
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    相关资源
    最近更新 更多