忽略Excel中的空白单元格命名范围

时间:2016-05-02 14:35:59

标签: excel-vba excel-formula excel-2010 vba excel

我有一个宏将一系列工作表中的数据复制到主数据库中,以便我可以在一个地方分析数据。导入的数据存在于明确定义的列中,因此我可以使用sumproduct公式生成报告。

我使用命名范围为每列数据命名,因此我不必在每个sum产品中使用Sheets!A1引用。但是,由于数据将根据导入的内容更改大小,因此我将命名范围设置为A2列的整个大小:A1048576。这意味着sumproduct需要永远运行。

有没有办法将命名范围限制为仅包含数据的单元格?它们将始终位于前n行(取决于每次运行时导入的数据量)。

或者我有更好/更简单的方法来实现此功能吗?

2 个答案:

答案 0 :(得分:1)

您可以使用公式代替直接单元格引用使范围名称动态化。

如果您希望范围名称在A2中开始并延伸到A列中的最后一行数据,则可以使用此公式

如果A栏有文字,请使用

=Sheet1!$A$2:INDEX(Sheet1!$A:$A,MATCH("zzzzzzz",Sheet1!$A:$A,1))

如果A栏有数字,请使用

=Sheet1!$A$2:INDEX(Sheet1!$A:$A,MATCH(99^99,Sheet1!$A:$A,1))

这些公式中的Match()函数将返回包含数据的最后一行的行号,而Index函数将返回A列中该行的单元格引用。

答案 1 :(得分:1)

随机信息关于我发布

的原因

首先,我使用了teylyn's推荐的方法(感谢你!)工作正常,并将其调整为包含任意长度的文本,而不是仅限于多少" z&# 34;你投入

其次,我扩展了代码,以便人们(比如我的用例)需要/喜欢使用命名表和标题。

希望这可以帮助。

忽略命名范围内的空白 - 版本1

使用与teylyn相同的方法,而不是:

=Sheet1!$A$2:INDEX(Sheet1!$A:$A,MATCH("zzzzzzz",Sheet1!$A:$A,1))

尝试使用""作为文本的最小语句,因此放入文本框的任何内容都将计为大于该值,告诉Match函数对其进行计数:

=Sheet1!$A$2:INDEX(Sheet1!$A:$A,MATCH("",Sheet1!$A:$A,-1))

这应该起作用的原因是MATCH最后一次看到该值在该列中不是真的(所以不是一个空白的antyhing)作为它将计数的行号。
注意:此方法不适用于数字。

注意:如果 之前 ,则该列中的值为的单元格随机空白仍将显示在列表中!

要删除仍可能显示随机空白单元格的问题,请按照我的下一个方法操作:

忽略命名范围内的空白 - 版本2

为了过滤一列值,以便所有文本显示在列的顶部,您可以将列表设为一个表,为其命名(例如" Table_Name"),并为列表中的列提供标题(例如" Column_Header")。

如果您希望命名范围包含您的列标题,并忽略所有空格,请尝试使用:

=INDEX(Table_Name[[#Headers],[Column_Header],1):INDEX(Table_Name[Column_Header],MATCH("",Table_Name[Column_Header],-1))

如果您希望从列数据的第一行开始,请尝试使用:

=INDEX(Table_Name[[#Data],[Column_Header],1):INDEX(Table_Name[Column_Header],MATCH("",Table_Name[Column_Header],-1))

我希望这是有意义的。我只是将表中每个选项的第一行定义为名称范围的起点。

注意: Numbers不会使用这些特定版本的MATCH,所以不要忘记使用以下版本的MATCH:

MATCH(99^99,Table_Name[Column_Header],1)



如果我错过任何东西,请告诉我!

旁注: 还有一个方法我已经被其他StackOverflow Excel专家使用,我会尝试找到并链接到这个评论,对于那些有兴趣拥有自动更新值列表的人,基于用户自己的值输入..