Excel VBA。如何计算孤立的数字系列

时间:2018-03-23 23:34:45

标签: excel-vba vba excel

我有一个excel电子表格,其中一列包含超过100000行的1和0。我正在尝试使用和excel vba宏来计算O连续序列中出现的数字O的次数。我的数字列看起来像这样(为了简单起见,我把它放在一行)

1,0,0,0,0,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1 ,1

因此,第一个0的序列从第二位开始,并且有四个连续的O.我正在尝试开发一个宏来计算第一个序列中的0的数量。此后,一旦出现1,宏返回相邻列中的序号。宏将继续,直到遇到另一个0并重复该过程。因此,在第七位,它将从Nil开始再次计算零的数量,并在相邻列中返回答案3。所有100,000行都应继续此过程。

以下是我对宏的尝试。问题是它从100,000行左右的数据中返回零的总数。请帮助我。

Sub Step1CountsNumberZerosInSequence()

'CountsNumberZerosInSequence宏 '宏确定序列中的零个数并返回该值 “

'步骤1:声明变量     昏暗的CloseOutRange作为范围     Dim CloseOutCell作为范围     Dim MaxDays作为整数     MaxDays = 1

'步骤2:定义目标范围     设置CloseOutRange =范围(“AY10:AY100000”)

'步骤3:开始循环遍历范围     对于CloseOutRange中的每个CloseOutCell

'步骤4:对每个细胞做一些事情     如果CloseOutCell.Value = 0那么     MaxDays = MaxDays + 1     结束如果

'步骤5:获取范围内的下一个单元格     下一个CloseOutCell

'步骤6:否则停止并提供最大数量     ActiveCell.Offset(1,0).Range(“A1”)。选择     ActiveCell.Value = MaxDays

End Sub

1 个答案:

答案 0 :(得分:1)

如果我做对了,你必须在步骤4中插入一个ElseIf,比如

'Step 4: Do something with each cell 
If CloseOutCell.Value = 0 Then 
    MaxDays = MaxDays + 1 
ElseIf CloseOutCell.Value = 1 Then
    MaxDays = 0
End If

编辑:这将在序列结束时返回0。如果你想"保持"最后的0计数,您可以使用临时变量,例如:

Dim temp = 0 as Integer
If CloseOutCell.Value = 0 Then 
    MaxDays = MaxDays + 1
    temp = MaxDays 
ElseIf CloseOutCell.Value = 1 Then
    MaxDays = 0
End If
Return temp