Excel VBA评估中的最后一行
我正在使用下面的代码:
Sub Evaluation_Formula() Dim i As Long With Worksheets("Sheet1") i = .Evaluate("MIN(IF((LEFT($B$1:$B$89,5)*1)=C1,$B$1:$B$89,""""))") .Range("F3").Value2 = i End With End Sub
但是,公式仅限于B89,如何在公式列B中使用最后一行?
对于所有意图和目的,您只关心B列中的最后一个数字,而不是最后一行。 要在工作表公式中做到这一点,你会使用像这样的数组公式。
=MIN(IF(--LEFT(B1:INDEX(B:B, MATCH(1E+99,B:B )),5)=C1, B1:INDEX(B:B, MATCH(1E+99,B:B))))
这可以转化为您的VBA 评估方法 ,如下所示。
Sub Evaluation_Formula() Dim i As Long With Worksheets("Sheet1") i = .Evaluate("MIN(IF(--LEFT(B1:INDEX(B:B, MATCH(1E+99,B:B )),5)=C1, B1:INDEX(B:B, MATCH(1E+99,B:B))))") .Range("F3").Value2 = i End With End Sub
双重一元 (aka double-minus或--
)的作用与将LEFT函数的文本结果乘以1相同。不需要传入零长度的string(例如""
),因为FALSE是足够的用于IFfunction中的不匹配。 由于您正在将文本评估为公式,因此不需要$
绝对标记。
保持.
请将该工作表名称.Evaluate
或添加到公式中的单元格引用。 没有它,如果Sheet1不包含工作簿的ActiveSheet属性,则会冒着评估其他工作表的B1:B89和C1单元格的风险。
我想这会发布适当的代码:
Sub Evaluation_Formula_w_LR() Dim i As Long Dim LR As Long With Worksheets("Sheet1") LR = .Cells(.Rows.Count, 2).End(xlUp).Row i = Evaluate("MIN(IF((LEFT($B$1:$B$" & LR & ",5)*1)=C1,$B$1:$B$" & LR & ",""""))") .Range("F10").Value2 = i End With End Sub