【发布时间】:2019-02-19 07:19:02
【问题描述】:
我有一个自定义 VBA 函数,我正在将大量单元格传递给(单列中大约 600 个单元格)。
公式如下:
=getRootWord($I620, OFFSET($H$8,0,0,(ROW()-ROW($H$8)),1))
(基本上,它说,“对于调用此公式的给定单元格,传入一个覆盖其上方每个单元格的范围,从第 8 行开始” - 有没有更好的方法来编写该公式?)
我的问题是,自定义 VBA 函数运行速度有点慢,实际上,传入的 90% 的单元格我不需要,并且必须在 VBA 函数中忽略。
此单元格上方的任何具有公式的单元格,而不是文本,我不感兴趣。
如何使用 Excel 公式对该范围进行操作 (OFFSET($H$8,0,0,(ROW()-ROW($H$8)),1)) 并排除该范围内具有公式的任何单元格? 或者排除任何非文本单元格?
该列中的每个单元格要么是一个公式(显示的公式相同),要么是文本 - 没有空格、数字、日期等...
【问题讨论】:
-
也许看看xlCellTypeConstants。如果没有看到实际的 UDF,这有点难以分辨。
-
大多数 VBA UDF 可以通过改进代码显着加速:所以发布您的 VBA 代码。
-
@CharlesWilliams 我认为 StackOverflow 不喜欢通用的“改进我的代码!”问题?
-
无论如何,我的问题是我不明白 OFFSET() 使公式不稳定,从而不必要地重新计算数百个单元格。删除 OFFSET() 的使用大大加快了速度,大约 90%。
标签: excel