Excel - 行的动态名称范围

时间:2018-04-02 20:01:51

标签: excel vba ms-office named-ranges

我有我想要的范围的宽度,但我有动态调整打印预览高度的问题。每周报告的行数每周调整一次,因此我想要一种创建自动更新高度的命名范围的方法。 问题是,有很多空白行混合在那里,我想要一种方法,我可以在列A中找到最后一个值,即使A1之间有空白:A(无论最后一行是什么)。下面是一个示例和我的范围公式,如果我尝试打印,表格会在中途切割。

enter image description here

=OFFSET(Sheet1!$A$1,0,0,COUNT(Sheet1!$A:$A),12)

我试图将白色字体放在空白列A单元格中,但没有运气。谢谢!

3 个答案:

答案 0 :(得分:1)

您应该能够使用此公式来获取所需内容(在名称管理器下使用此公式,并将名称​​ print_area 作用于相关工作表): =$A$1:INDEX($D$1:$D$1000,MATCH(9.99999999999999E+307,$A$1:$A$1000))

  • $A$1就是我所说的锚细胞。这是您要打印的左上角单元格;
  • $D$1:$D$1000将成为最右边的列,应该“完成”您的区域(将D更改为相应的列,并将1000更改为更远的行低于你的报告会延长);和
  • MATCH函数正在尝试在$A$1:$A$1000中找到最大可能值。 这仅适用于数字数据。请务必使用在最后一行中包含数据的列(您声明沿途可能存在空白)。

<强>注意:

如果你走这条路,我高度建议你对定义的名称做出如下评论:
应该等于:= $ A $ 1:INDEX($ D $ 1:$ D $ 1000,MATCH(9.99999999999999E + 307,$ A $ 1:$ A $ 1000))
原因是,如果你搞乱边缘或打印标题或其他东西,它可能会重置 print_area ,你将不得不重新开始。

答案 1 :(得分:0)

您可以使用它来查找A列中的最后一行。由于它从下往上搜索,最后一个单元格上方的空白行不会影响它。

client

答案 2 :(得分:0)

您想要VBA解决方案吗?您的标签显示VBA,但您的公式是Excel公式。如果是VBA,通常我只获取ListObject的地址(即表)并从中提取最后一行。像这样:

With Sheet2

    .PageSetup.PrintArea = .Range("$A$1:" & .ListObjects("Table1").DataBodyRange.Cells(.ListObjects("Table1").DataBodyRange.Cells.Count).Address).Address

End With