Excel vba加速公式到单元矩阵的写入

Excel vba加速公式到单元矩阵的写入,excel,vba,excel-formula,Excel,Vba,Excel Formula,我有一个矩阵,写在纸上 Destination.Resize(UBound(Matrix, 2), UBound(Matrix, 1)).value = Application.Transpose(Matrix) 在这个单元格中,我想用NaN(不是数字)替换每个值0 然而,这需要很长时间 有没有可能加快速度?您的NV()是打字错误还是自定义项?我在下面的示例中使用了NA(),因为Excel 2007中不存在NV()。假设您的代码在某个地方将目标设置为完整的相关范围(在上面使用Resize的代码

我有一个矩阵,写在纸上

Destination.Resize(UBound(Matrix, 2), UBound(Matrix, 1)).value = Application.Transpose(Matrix)
在这个单元格中,我想用NaN(不是数字)替换每个值0

然而,这需要很长时间

有没有可能加快速度?

您的NV()是打字错误还是自定义项?我在下面的示例中使用了NA(),因为Excel 2007中不存在NV()。假设您的代码在某个地方将目标设置为完整的相关范围(在上面使用Resize的代码中没有设置),请尝试:

EDITlookat:=添加了参数

Destination.Replace what:=0, replacement:="=NA()", lookat:=xlWhole

由于您要添加多个公式,而不是常量,因此还应根据Dave的建议对计算模式进行更改。此外,还可以“关闭”其他功能如果需要--例如:DisplayEvents、EnableEvents、Intgeractive、StatusBar

您是否考虑过使用自动筛选?与Application.ScreenUpdate=False一起使用,也可以尝试Application.Calculation=xlCalculationManual(只需记住将其切换回xlCalculationAutomatic或之前在最后设置的任何其他功能)在英语中,我假设它的意思是“不可用”,在德语中是“nicht verfügbar”,因此NV。我发现英语NaN(在Matlab中)更清楚。该代码的问题是,它是在字符串而不是数字的基础上替换的。这意味着数字200被
2=NA()=NA()替换
。此外,它仅替换第一列中的内容。跳过所有其他内容。@MatthiasPospiech了解NV()德语与英语的对比。谢谢。关于将200替换为2=NA()=NA(),只需指定参数lookat:=xlother(我将在回答中进行更改)。关于仅在第一列中工作,可能您没有指定要包括其他列的目标,或者您的数据中没有0。我建议在替换行上放置一个断点,然后在即时窗口中键入?Destination.Address以查看它所指的内容。我错了。VBA需要英文公式,以便它在德语中似乎是正确的。添加“=NV()”会导致#name?,而“=NA()”会导致“=NV()”。我已经通过使用
c.FormulaLocal=“=NV()”解决了这个问题
。如果也可以使用replace函数来完成,那将是很好的,但不是必需的。列的东西是连接的。在第一次运行时,它在以后的运行中不起作用,它在整个表上都起作用。@MatthiasPospiech我认为使用“=NV()”是可行的在范围内。替换方法将在您的系统上工作。请尝试并让我知道。但是替换方法肯定比在所有单元格中循环快。
Destination.Replace what:=0, replacement:="=NA()", lookat:=xlWhole