在传递给功能之前过滤单元格的范围

时间:2019-02-19 07:19:03

标签: excel

我有一个自定义的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)并排除该范围内具有公式的任何单元格?还是排除任何非文本单元格?

该列中的每个单元格都是公式(显示相同的公式),或者是文本-不能有空格,数字,日期等。

1 个答案:

答案 0 :(得分:1)

Application.ThisCellApplication.Caller将引用UDF所在的单元格。您可以从其中之一获取当前行。

Range.SpecialCells(xlCellTypeConstants)仅考虑值;不是公式或空格。 Range.SpecialCells(xlCellTypeConstants, xlTextValues)进一步将其限制为文本值。如果存在文本值的未连接“区域”,则可能需要遍历范围并集的“区域”。

要获取第I列中从第8行开始到带有try公式的行的一系列单元格,

dim rng as range

with application.caller.parent
    set rng = intersect(.range(.cells(8, "I"), .cells(application.caller.row-1, "I"))).SpecialCells(xlCellTypeConstants, xlTextValues)
end with

debug.print rng.address(0,0)