忽略Excel命名区域中的空白单元格

忽略Excel命名区域中的空白单元格,excel,excel-formula,excel-2010,vba,Excel,Excel Formula,Excel 2010,Vba,我有一个宏,可以将一系列工作表中的数据复制到主控表中,这样我就可以在一个地方分析数据。导入的数据存在于定义良好的列中,因此我可以使用sumproduct公式生成报告 我使用命名范围为每列数据命名,因此我不必使用工作表!A1每个和积中的引用。但是,由于数据大小将根据导入的内容而改变,因此我将命名范围设置为列A2:A1048576的整个大小。这意味着sumproduct需要永远运行 是否有办法将命名范围限制为仅包含数据的单元格?它们将始终位于前n行(取决于每次运行导入的数据量) 或者有没有更好/更简

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

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

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


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

您可以使用公式而不是直接单元格引用来动态设置范围名称

如果希望范围名称从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列中该行的单元格引用。

关于我为什么发布的随机信息 首先,我使用了推荐的方法(谢谢!),效果很好,并对其进行了调整,使其包含任意长度的文本,而不限于输入多少个“z”。

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

希望这有帮助。

忽略命名范围中的空格-版本1 使用与相同的方法,而不是:

=Sheet1!$A$2:INDEX(Sheet1!$A:$A,MATCH("zzzzzzz",Sheet1!$A:$A,1))
尝试使用“”作为文本的最小语句,以便放入文本框的任何内容都将计为大于该值,并告诉匹配函数对其进行计数:

=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))
如果希望从列数据的第一行开始,请尝试使用:

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

注意:数字与这些特定版本的MATCH不兼容,因此不要忘记使用以下版本进行MATCH:

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


如果我遗漏了什么,请告诉我

旁注:
另一位StackOverflow Excel专家同事还使用了另一种方法,我将尝试查找并链接到这篇评论,以帮助您根据用户自己输入的值自动更新值列表。

请看:我不知道这是否对您有帮助,但在Excel中,您可以执行“转到空白”操作,这意味着:按Ctrl+G,“特殊”,“空白”。也许你可以复制所有内容,然后在目标工作表中执行“转到空白”,并删除每个结果(右键单击“删除”,“向上或向左移动单元格”)。@Dominique-OP需要一个动态命名范围,该范围随工作表的变化而变化
MATCH(99^99,Table_Name[Column_Header],1)