仅评估VBA中公式的值?

时间:2018-01-12 11:06:36

标签: excel vba excel-vba

我能够执行特定的公式并将其分配给单元格:

my_cell = Int(Cells(row, my_col).Value2) '# "row" is a row, "my_col" is a column, "i" is a counter
Cells(row, i).FormulaR1C1 = "=a working formula that returns a date as a number"
Cells(row, i).NumberFormat = "dd/mm/yyyy" '# format the number as a date

但我实际上只想写公式返回的值,而不是在选择目标单元格时显示整个公式的语法。

我发现了这种方法并且有效:

my_cell = Int(Cells(row, my_col).Value2)
Cells(row, i).FormulaR1C1 = "=a working formula that returns a date as a number"
Cells(row, i).Copy
Cells(row, i).PasteSpecial xlPasteValues
Cells(row, i).NumberFormat = "dd/mm/yyyy"

但它似乎很慢(我有很多数据)并且没有真正作为解决方案执行,因为它复制并粘贴了值而不是直接评估和分配它。

是否有更快,更直接的方法来完成此任务?

2 个答案:

答案 0 :(得分:3)

大多数工作表功能在VBA中可用。语法是:

WorksheetFunction.SomeFunction(arg1, arg2, ...)

所以,您可以使用以下代码:

With WorksheetFunction
    Cells(row, i)= 'Your formula, with function preceeded with dot .
End With

某些工作表函数不能以这种方式使用,例如LEFT,但通常有等效的VBA函数,因此我的类型为Left而不是dot。

答案 1 :(得分:1)

如果您看到公式而不是结果,可能您已激活选项功能区上的“显示公式”选项?

Display Formulas

要使用VBA将其关闭,只需输入:

ActiveWindow.DisplayFormulas = False

可能吗?