我想在 Excel 中创建一个包含范围的函数模板,但每次应用模板时,该范围内的单元格数量都会发生变化。
我如何确定我想要的范围从 B2 开始到 B 列中最后一个包含文本的单元格结束?
答案1
这取决于你正在做什么,因此如果你在问题中添加更多细节会有所帮助。因为这样我们无法知道你正在尝试做什么,或者为什么。
因此,我只能建议您如何创建自动(动态)范围:
1
使用表格 - Excel 表格功能非常强大,并且会自动算作一个范围,如果您想引用列中的每个单元格,只需输入 [列名] 而不是传统的单元格引用。Excel 表格也会随着新行的添加而自动扩展,这非常方便。
表格的背面让我们重新回到这个模板是什么以及它应该做什么的问题:如果模板应该由 Excel 2003 或更早版本的用户访问,则表格将不起作用。
2
这让我想到了选项 2:动态命名范围。
- 通过单击第一个数据单元格(通常为第 2 行)选择要设置自动范围的列,然后转到公式>定义名称>定义名称
- 给名称起一个清晰的名字,例如ColumnNameRange
- 保留范围为工作簿并添加注释(如果需要)
- 在引用:中输入此公式(根据需要替换单元格和工作表引用)
=OFFSET(SheetName!$A$2,0,0,COUNTA(SheetName!$A$2:$A$500),)
当在公式中引用此动态命名范围时,它将返回从偏移量中指定的范围到 COUNTA 中指定范围的后半部分的所有内容。该公式查看 COUNTA 中的整个范围以获取非空白单元格的数量,然后从第一个单元格创建偏移量范围选择,直到找到的单元格数量。
有关动态命名范围的更多信息,请访问此处:http://www.ozgrid.com/Excel/DynamicRanges.htm
有关表格的更多信息,请参见此处:http://www.ozgrid.com/Excel/data-tables.htm
关于动态命名范围,需要记住以下几点:
- 如果你像上面一样将 COUNTA 的第二部分设置为 500,然后最终得到超过 500 行的数据,那么它就不会计算额外的数据,所以请记住这一点
- 如果 COUNTA 查看的数据中有空白,则它只会倒数到第一个空白。为避免这种情况,请始终将 COUNTA 设置为第一列(这应该是您的 ID 列,因此不应有空白),然后将 OFFSET 中引用的单元格设置为您想要的列(因此对于 D 列,将 COUNTA 设置为 $A$2:$A$500,将 OFFSET 设置为 $D$2
- 务必使用 $ (F4) 修复所有单元格范围,否则此操作将无法正常工作。所有单元格范围应如下所示 $column$row
- 您可以通过在第一个 COUNTA 后添加另一个 COUNTA 来创建涵盖列集合的动态命名范围:=OFFSET($A$1,0,0,COUNTA($A1:$A500),COUNTA($B1:$B500))。您可以通过声明某些列来对表格执行此操作:=Table1[[Column1]:[Column2]] 或声明整个表格:=Table1
答案2
这是一个可以进行选择的宏
Public Sub SelectRange()
Cells(2, 2).Select
Range(Selection, Selection.End(xlDown)).Select
*do stuff*
End Sub
现在只需更换做东西对选择进行您想要的操作并将结果输出到您要在其中放置公式的任何单元格。
如果您告诉我们公式,我们可以将其添加到 vba 中。如果您在公式生效之前需要用户输入,您可以将其添加到按钮或其他操作中。