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