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 单元格的风险
我正在使用以下代码:
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.