计算 VBA 函数中一行中完整的 'strings' 个数字
Count number of unbroken 'strings' of numbers across a row in VBA Function
我已经和这个问题斗争了好几天了,显然遗漏了一些东西。自从我上次使用 VBA 以来已经有一段时间了,我很难记住。
寻找一行中 'tours' 或连续 'strings' 个 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' evaluate Offset if 语句返回了错误的数字。但是当我更正它只是 returns 0.
如有任何帮助,我们将不胜感激!!
谢谢!
我不确定你想做什么,但从你的例子来看,这样的事情就可以了。
通常,您将范围作为参数传递,它进入行并在循环中进行两次检查。如果两项检查都成功,则 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
我已经和这个问题斗争了好几天了,显然遗漏了一些东西。自从我上次使用 VBA 以来已经有一段时间了,我很难记住。
寻找一行中 'tours' 或连续 'strings' 个 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' evaluate Offset if 语句返回了错误的数字。但是当我更正它只是 returns 0.
如有任何帮助,我们将不胜感激!!
谢谢!
我不确定你想做什么,但从你的例子来看,这样的事情就可以了。
通常,您将范围作为参数传递,它进入行并在循环中进行两次检查。如果两项检查都成功,则 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