用Excel将公式替换为值

9

我有一个Excel工作簿(1),其中包含约9个表格,可以从第二个工作簿(2)中获取和操作数据。

从工作簿(2)中获取数据后,我需要将工作簿(1)中的公式替换为公式所产生的结果值,然后保存带有结果的工作簿(1)。

是否有一种宏可以帮助我完成这项任务?


是的,只需复制范围并使用.PasteSpecial xlPasteValues。例如:Range("A1:D10").Copy Range("A1").PasteSpecial xlPasteValues - user1274820
@Omar。非常感谢你,但是我需要一个脚本来复制多个工作表上的所有值,而不仅仅是一个范围。此外,我对VB知之甚少,因此需要一个完整的脚本。 - Alex
使用For循环遍历所有工作表,复制然后特殊粘贴为值。有很多代码示例可以告诉你如何完成这些操作。 - teylyn
3个回答

18
在你的新工作簿上,一些基本的代码,比如:
Sub Value()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Sheets
    ws.UsedRange.Value = ws.UsedRange.Value
Next
End Sub

2
这在大多数情况下应该可以工作,但我会使用.Value2而不是.Value。它比较快,并且不会出现任何单元格数据类型的问题。 - AlexM

0

虽然这篇文章有点过时了,但我想提一下一个非循环方法,它非常有用。在某些情况下,循环可能会导致代码执行速度变慢。如果要在单元格中替换公式而不使用循环,请尝试以下方法:

With Sheets("example").Range("A1:C1000")
   .value = .value
End With

您可以根据需要修改参考,但执行是无缝的、快速的,并且作为奖励 - 防止范围突出显示,如果您采用了.copy + .pastespecial xlPasteValues方法,则无法清除。


-1
似乎对我有用的是使用concatenate()。因此,例如,我引用另一个工作表中单元格的公式是:
=arrayformula(iferror(index('To Be Processed'!X:X,small(if($A$1='To Be 
Processed'!$Y2,row('To Be Processed'!X:X)),row((2:2))),"")))

如果我改变公式为:

=concatenate(arrayformula(iferror(index('To Be
Processed'!X:X,small(if($A$1='To Be Processed'!$Y2,row('To Be
Processed'!X:X)),row((2:2))),""))))

它将参考单元格中的文本值放入我的第二个工作表中。

这可能有助于您如何填充您的工作表,也可能没有帮助 - 我不太擅长VBA,这意味着我更多地手动完成事情 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接