如何无需辅助列将多个数据块提取为连续dynamic array
无辅助列提取数据块为连续动态数组方案
核心思路
用累积计数法生成True/False筛选数组:统计每行及之前「起始标记」的出现次数,减去「结束标记」的出现次数,结果大于0时,即判定当前行处于目标数据块内。
公式实现(Excel 365/2021)
假设数据存于A列,起始标记为"开始"、结束标记为"结束",在空白单元格输入以下公式即可直接得到连续的动态数组结果:
=FILTER(A:A, SCAN(0, A:A, LAMBDA(a, b, a + (b="开始") - (b="结束"))) > 0)
公式拆解
SCAN(0, A:A, LAMBDA(a, b, a + (b="开始") - (b="结束"))):从初始值0开始遍历A列,遇到起始标记时计数+1,遇到结束标记时计数-1,生成一组累积计数值。数据块内的行计数始终大于0,非数据块行计数为0或负数。> 0:将累积计数值转换为True/False筛选数组,标记出所有数据块内的行。FILTER(A:A, ...):基于筛选数组提取对应行,输出连续的动态数组。
灵活适配
- 若标记文本不同,直接替换公式中的
"开始"和"结束"即可; - 若数据不在A列,替换为对应列引用(如
B:B); - 如需提取多列数据,将
A:A替换为目标列范围(如A:C)。
内容的提问来源于stack exchange,提问作者Zaphod Beeblebrox
相关产品推荐
相关产品推荐

