如何提取不同宽高的动态数据区域?Google Sheets公式实现
解决Google Sheets动态提取多组分隔数据的方案
核心思路
利用FILTER、MATCH、INDEX结合数组公式,自动识别分隔列位置和数据区域的有效行数,替代需要手动指定偏移量的OFFSET函数,实现动态适配。
具体公式实现
提取Data 1(第一组数据,左侧到第一个含“|”的列)
在目标起始单元格输入:
=LET( sep_col, MATCH("|", A8:Z8, 0), max_row, MAX(ROW(A:A)*(A:A<>"")), FILTER(A8:INDEX(A:INDEX(A:Z, max_row, sep_col-1)), A8:A<>"") )
sep_col:定位第一组数据右侧的分隔列位置max_row:自动获取原始数据的最后有效行FILTER:提取从A列到分隔列前一列的非空数据区域
提取Data 2(中间组数据,两个分隔列之间)
在目标起始单元格输入:
=LET( sep_cols, FILTER(COLUMN(A8:Z8), A8:Z8="|"), start_col, INDEX(sep_cols, 1)+1, end_col, INDEX(sep_cols, 2)-1, max_row, MAX(ROW(A:A)*(A:A<>"")), FILTER(INDEX(A:Z, 8, start_col):INDEX(A:Z, max_row, end_col), INDEX(A:A,8):INDEX(A:A,max_row)<>"") )
sep_cols:获取所有含“|”的分隔列位置start_col/end_col:定位中间组数据的起止列- 同样通过
max_row动态锁定数据行范围
提取Data 3(第三组数据,第二个分隔列到右侧)
在目标起始单元格输入:
=LET( sep_cols, FILTER(COLUMN(A8:Z8), A8:Z8="|"), start_col, INDEX(sep_cols, 2)+1, max_row, MAX(ROW(A:A)*(A:A<>"")), FILTER(INDEX(A:Z, 8, start_col):INDEX(A:Z, max_row, COLUMNS(A:Z)), INDEX(A:A,8):INDEX(A:A,max_row)<>"") )
- 以第二个分隔列为起点,提取到表格最右侧的非空数据区域
优势说明
- 无需手动指定区域宽高,自动适配数据变化
- 避免
OFFSET的易出错问题(偏移量需手动更新) - 利用
LET函数简化公式结构,提升可读性
内容的提问来源于stack exchange,提问作者game01 gamer
相关产品推荐
相关产品推荐

