我写了一个函数但由于某种原因它不起作用。我调试了,但我还是不知道发生了什么。我写了一些其他函数来理解什么不起作用,我得出结论,activecell是有问题的部分。出于某种原因,当我写函数activecell时。未检测到。 我在下面写了我的代码。该函数有两个参数,r(一个只有列的范围,换句话说就像是Ai:Aj)和名称(必须是一个字符串),这个函数应该做的是计算最长的外观连续命名,换句话说,如果我输入的单元格具有值a,a,b,a,a,a,如果name = a,则函数将返回3.
Function cont(r As range, name As String) As Integer
Dim count As Integer, l As Integer
r.Cells(1).Activate
l = 0
count = 0
Do While IsEmpty(ActiveCell) = False
If ActiveCell.Value <> name Then
ActiveCell.Offset(1, 0).Activate
Else
Do While ActiveCell.Value = name
count = count + 1
ActiveCell.Offset(1, 0).Activate
Loop
If count >= l Then l = count
End If
count = 0
Loop
cont = l
End Function
我抬头看看是否有其他人遇到类似的问题,但我找不到有用的东西。也许有人在这里可以告诉我什么是错的?谢谢!
答案 0 :(得分:2)
不要使用激活或选择,只需迭代输入范围并测试它:
Function cont(r As Range, name As String) As Integer
Dim i&, j&, cnt&
For i = 1 To r.Rows.count
If r(i, 1).Value = name Then
For j = i To r.Rows.count
If r(j, 1).Value <> name Then
Exit For
Else
cnt = cnt + 1
End If
Next j
If cnt > cont Then cont = cnt
cnt = 0
i = j
End If
Next i
只用一个循环来做:
Function cont(r As Range, name As String) As Integer
Dim i&, cnt&, tst As Boolean
For i = 1 To r.Rows.count
If r(i, 1).Value = name And tst = True Then
cnt = cnt + 1
ElseIf r(i, 1).Value = name And tst = False Then
tst = True
cnt = 1
Else
tst = False
If cont < cnt Then cont = cnt
End If
Next i
If cont < cnt Then cont = cnt
End Function
有关避免选择和激活的更多信息,请参阅此处:How to avoid using Select in Excel VBA macros