设置动态打印区域? vba 告别反复设置打印区域! Excel实现动态分页显示数
今天我们来解决一位同学这样的需求:动态分页显示数据。
例如A1:B10是数据源区域,E2单元格是页码(需要手动切换不同的页码),我们想要在动态打印区域即G:H列,设置每页显示3行数据源的数据,通过E2单元格的按钮切换页码。首行深入了解行G2:H2不计入行数,且是固定不变的。
目的:打印时不用反复设置打印区域进行打印了,始终是G3:H5区域不同页码的3行数据。
微软Office LTSC 2021专业增强版 简体中文批量许可版 2024年09月更新
- 类型:办公软件
- 大致:2.2GB
- 语言:简体中文
- 时刻:2024-09-12
查看详情
这个案例我们可以通过OFFSET函数得到解决方案。
OFFSET函数回忆:
OFFSET函数一个动态引用函数,用于根据指定的起始位置、偏移行数和列数,返回一个单元格或区域(由行高列宽确定区域)的引用。
它常用于动态调整数据范围或构建动态公式。
OFFSET函数语法:
=OFFSET(基准单元格, 行偏移数, 列偏移数, [高度], [宽度])
基准单元格:基准位置(必填)。
- 行偏移数:向上(负数)或向下(正数)偏移的行数。
- 列偏移数:向左(负数)或向右(正数)偏移的列数。
- [高度](可选):返回区域的行数(默认为 1)。
- [宽度](可选):返回区域的列数(默认为 1)。
开头来说我们确定OFFSET函数的第一参数,基准单元格。
这个很简单,我们以固定单元格位置A2单元格作为起始基准单元格,这里由于涉及不到公式的下拉填充,用到的是数组溢出结局,因此可以不必对A2单元格做完全引用的处理。
接下来我们确定OFFSET函数的第二参数,行偏移数。
我们可以通过输入公式:
=(E1-1)3
来确定行偏移数。
E1单元格页码为1时,G3单元格返回0,表示行偏移0行
以此类推:
- E1单元格页码为2时,G3单元格返回3,表示行偏移3行
- E1单元格页码为3时,G3单元格返回6,表示行偏移6行
- &8230;&8230;.
以此类推,不做解释
这样我们将上述公式带入OFFSET函数的第二参数,第三参数我们列偏移数规定为0即可(不作偏移):
=OFFSET(A2,(E1-1)3,0)
这样以A2单元格为基准,行偏移数分别向下偏移0行、3行、6行,列偏移数均为0,偏移后的单元格依次为A2单元格日期“3月1日”、A5单元格日期“3月5日”、A8单元格日期“3月10日”。
- E1单元格页码为1时,首行日期为A2单元格日期“3月1日”
- E1单元格页码为2时,首行日期为A5单元格日期“3月5日”
- E1单元格页码为3时,首行日期为A8单元格日期“3月10日”
最终确定OFFSET函数的第四和第五参数,即偏移后获取数据区域的高度与宽度。
OFFSET函数的第四和第五参数:
=OFFSET(A2,(E1-1)3,0,3,2)
由于目前偏移后的是某个单元格位置(默认高度与宽度均为1),因此我们需要在此位置上(A2、A5、A8)分别向下取高度为3,向右取宽度为2的区域。
那么得到的这三个区域就是每页的3行数据。
偏移的宽度也可以使用COLUMNS进行统计:
=OFFSET(A2,(E1-1)3,0,3,COLUMNS(A:B))
COLUMNS(A:B)可以获取A:B区域的列数2,这样做的好处是在A:B区域插入其他列的时候,OFFSET的第五参数宽度是动态变化的。
最终的效果展示:
推荐阅读:excel表格中FILTER+SORT函数实现动态排序筛选的技巧