来解答一个客户求助问题:如何自动提取出表格最后若干行的数据?表格会不断往下增加数据。
案例:下图 1 是各部门每个月的业绩明细,随着时间的推移,新的数据会不断往下面增加。
请设置公式,每次自动提取出最近一个月中所有人的业绩。
效果如下图 2 所示。
解决方案:1. 将表头复制到目标区域 --> 在 H2 单元格中输入以下公式 --> 回车:
=OFFSET($A$1,COUNTA($A:$A)-9,,9,6)
公式释义:
OFFSET 函数的作用是返回对单元格或单元格区域中指定行数和列数的区域的引用;
语法为 OFFSET(reference, rows, cols, [height], [width])
reference:偏移的起始位置;
rows:需要向上或向下偏移的行数;
cols:需要向左或向右偏移的列数;
[height]:可选;引用区域的高度;
[width]:可选;引用区域的宽度
本公式的含义为:自 $A$1 起,偏移 COUNTA($A:$A)-9 行,也就是 A 列自下往上倒数第 9 行,因为总共有 9 名员工;返回 9 行 6 列的区域;
在 O365 中,会生成动态数组区域,所以直接回车就能查找出所有结果。如果是低版本的 Excel,公式就要比这复杂,而且最后还要以三键结束,生成数组函数;
将公式中的参数全部设置为绝对引用
2. 如果将数据表中的行数删除一些,右边的公式区域会自动更新结果。
如果没有 O365,建议可以用下面的公式。
3. 在 H2 单元格中输入以下公式 --> 向右向下拖动公式:
=INDEX(OFFSET(A$1,COUNTA($A:$A)-1,,-9),ROW($A1))
公式释义:
offset 的参数换了一种用法,从 A1 开始,往下偏移总行数 -1,即到达最后一行,引用高度为倒数共 9 行;宽度缺失,默认为 1 列;
index 是根据参数中的行列坐标,在区域中找出定位的值;offset 的结果就是要查总的区域;ROW($A1) 表示第几行;
本公式中需要注意的是参数的用法,offset 的起始位置的列要相对引用,而行绝对引用,row 函数只要确保行相对引用就行
4. 如果在查询区域增加行数,查询结果仍能正确查找出结果。