如何编写VBA来返回列L中最大日期的第一个行号?
我正在尝试这个代码并得到
“未设置对象变量或With块变量”
Sub FindMaxValRow()
Dim Rng As Range
Dim MaxCell As Range
Dim MaxVal As Long
Set Rng = Range("L1:L500")
MaxVal = WorksheetFunction.Max(Rng)
Set MaxCell = Rng.find(what:=MaxVal, LookIn:=xlValues)
MsgBox "Maximum value found at row " & MaxCell.Row
End Sub
字符串
4条答案
按热度按时间68bkxrlz1#
确定日期第一次出现的行
L
有日期(和空单元格)M
在第2行中具有向下复制的公式=L2
(为测试添加)N
在第2行中具有溢出公式=L2:L10
(为测试添加)的数据
应用vs工作表函数
Max
(例如Sum
...)函数将失败,如果在该范围内存在错误值。Match
(或例如VLookup
)函数。如果您使用其早期绑定(WorksheetFunction
)版本,则会发生运行时错误。为了避免这种情况,您应该使用其后期绑定(Application
)版本,以便能够使用IsNumeric
或IsError
函数测试其结果。匹配
Application.Match
函数,而不是Find
方法。Match
将其转换为整数(整数)。使用 CLng 函数只是为了强调这一点。字符串
查找
Find
方法,则需要使用以下模式将值转换为字符串:型
使用
\/
分隔符,使其独立于区域设置。型
匹配vs查找
Match
比Find
更高效(更快)。Match
将识别第6行,无论如何,即即使行6被隐藏或使用AutoFilter
隐藏。如果您使用Find
和日期以及xlFormulas
或xlFormulas2
(请参阅下面的测试),也会发生同样的情况,但您只能在单元格包含值时使用此方法。AutoFilter
隐藏或隐藏,则值被格式化为字符串(MaxDateString
)和xlValues
的Find
将标识第8行(参见上文和下文)。测试
型
测试结果
型
8ulbf1ek2#
VBA的日期格式、本地数字格式和find方法有一个古老的问题,当你在一个单元格中看到其他东西时,会比较实际存储的值。不要问为什么,但这个代码是有效的
字符串
在这种情况下,显示日期的示例化并不重要。
smtd7mpg3#
你知不知道你可以用这个公式得到这些信息?
字符串
让我来解释一下它是如何工作的:
MAX(B$3:B$11)
计算最大值。MATCH(MAX(B$3:B$11),B$3:B$11,0)
查找该列表中的最大值(使用“0”表示“完全匹配”)。INDEX(...)
查找在同一数组中找到的最大值的索引。ROW(...)
.好吧,这是显而易见的:-)玩得开心点
41zrol4v4#
如果用公式计算的话
字符串
如果要在VBA中计算,则可以使用Evaluate方法:
型