gpt4 book ai didi

excel - VBA for Excel,编写函数时activecell不起作用

转载 作者:行者123 更新时间:2023-12-04 20:11:37 27 4
gpt4 key购买 nike

我写了一个函数,但由于某种原因它不起作用。我调试了,我仍然不明白发生了什么。我写了一些其他函数来理解什么不起作用,我得出的结论是 activecell 是有问题的部分。出于某种原因,当我编写函数 activecell 时。未检测到。
我在下面写了我的代码。该函数有两个参数,r(一个只有一列的范围,换句话说,类似于 Ai:Aj)和 name(必须是一个字符串),这个函数应该做的是计算最长出现连续命名,换句话说,如果我输入的单元格的值为 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

我抬头看看是否其他人有与我类似的问题,但我找不到有用的东西。也许这里有人可以告诉我出了什么问题?谢谢!

最佳答案

尽可能不要使用激活或选择,只需遍历输入范围并测试它:

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

enter image description here

只需一个循环即可:
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

关于excel - VBA for Excel,编写函数时activecell不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41400154/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com