Excel 中的最后一行 VBA 评估

Last Row in Excel VBA Evaluate

我正在使用以下代码:

Sub Evaluation_Formula()
    Dim i As Long
    With Worksheets("Sheet1")
        i = .Evaluate("MIN(IF((LEFT($B:$B,5)*1)=C1,$B:$B,""""))")
        .Range("F3").Value2 = i
    End With
End Sub

但是公式仅限于B89,请问如何在公式中使用Last Row in Column B?

我猜这将 post 正确的代码:

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:$B$" & LR & ",5)*1)=C1,$B:$B$" & LR & ",""""))")
    .Range("F10").Value2 = i
End With
End Sub

出于所有意图和目的,您实际上只关心 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 Evaluate method,如下所示。

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

double unary(又名 double-minus--)与将文本结果相乘的工作相同LEFT function 减 1。无需传递零长度字符串(例如 ""),因为 FALSE 足以满足 IF 函数中的不匹配项。由于您正在将文本计算为公式,因此不需要 $ 绝对标记。

保留 .Evaluate 中的 . 或将工作表名称添加到公式中的单元格引用中。没有它,如果 Sheet1 不包含工作簿的 ActiveSheet property.

,您 运行 评估另一个工作表的 B1:B89 和 C1 单元格的风险