使用公式更新单元格,但将其作为值

时间:2018-09-23 12:54:16

标签: excel vba excel-vba

我一直在处理Excel中的大量数据,这些数据是我使用宏从两个不同的源电子表格中填充公式的。问题在于,公式太多会导致电子表格的爬网速度变慢。互联网搜索使我相信我需要将数据设置为值。我已经测试了一种吸引我眼球的方法,但是无法使其按我需要的方式工作。

Range("D1:D10").Formula = "=SUM(A1:A10)"
Range("E1:E10").Formula = "=SUM($A$1:$A$10)"
Range("F1:F10").Formula = Evaluate("=SUM(A1:A10)")
Range("G1:G10").Formula = Evaluate("=SUM($A$1:$A$10)")
Range("H1:H10").Value = Evaluate("=SUM(A1:A10)")
Range("I1:I10").Value = Evaluate("=SUM($A$1:$A$10)")
Range("J1:J10").Value = "=SUM(A1:A10)"
Range("K1:K10").Value = "=SUM($A$1:$A$10)"

我刚刚在A1到A10中输入了随机数。通常,我将使用类似将根据我需要如何使用公式来更新D和E范围的代码。我希望在公式周围使用Evaluate()来实现在每个单元格而不是公式中放置值的功能,但是它没有做的就是像D范围公式那样更改要从中提取的范围。如果我使用Evaluate(),它将仅使用其包含的确切公式,基本上使其与绝对引用没有区别。我需要在输入值时灵活地做这两种事情。

我知道我可以实现目标的一种方法是,简单地将更新后的公式复制到我的范围中,然后粘贴到它们上,但是我希望保持这一步。

我看到的另一个选项是Range("C1").Value = Range("A1").Value,但是我不确定如何将其与VLOOKUP或INDEX&MATCH一起使用。我将来自两个不同工作表的一组参考数据放在主工作表上,然后删除重复项。从那里开始,我正在使用公式在其他表格上查找不同的信息。某些信息可能是两个表中的一个,但不是同时存在的,所以我必须使用IFERROR。

我想我正在尝试找到一种通用的方法。如果您认为有一个更好的选择不能解决我的特定问题,但却解决了避免冻结如此大量数据的最终问题,那么我欢迎您提出建议。

1 个答案:

答案 0 :(得分:4)

将相对寻址的公式放入范围内,然后恢复为从公式返回的值。

with Range("D1:D10")
    .Formula = "=SUM(A1:A10)"
    .value = .value
end with

尽管目前我没有在线白皮书可以链接到以下论据,但我将限制使用Evaluate。我从来没有发现它是一种有效的编码方法,而且我个人仅将其用作最后的手段。