移动版Excel公式需求:将列内任意连续3单元格数据提取至该列前3单元格
移动版Excel提取连续3个单元格到列前3位的解决方案
原公式问题分析
你拿到的公式=IF(ROW(A1)<=COUNTA(A:A)-2, INDEX(A:A, ROW(A1)) & ", " & INDEX(A:A, ROW(A1)+1) & ", " & INDEX(A:A, ROW(A1)+2), ""),作用是将每一行起始的连续3个单元格内容合并成逗号分隔的字符串(比如把A1、A2、A3合并到当前单元格,A2、A3、A4合并到下一行),和你要“把任意位置的连续3个单元格条目分别放到列前3个单元格”的需求不匹配。
针对需求的解决方案
假设你要处理的是A列,目标是找到A列中第一组连续的3个非空单元格,并将这三个单元格的内容分别放到A1、A2、A3中(建议先备份原数据,或用辅助列存储结果避免覆盖):
步骤1:找到连续3个非空单元格的起始行号
在空白辅助单元格(比如B1)输入以下公式,得到第一组连续3个非空单元格的起始行号:
=MATCH(TRUE, INDEX((NOT(ISBLANK(A:A)) * NOT(ISBLANK(OFFSET(A:A,1,0))) * NOT(ISBLANK(OFFSET(A:A,2,0)))), , 0)
注:移动版Excel输入后按回车即可,部分版本需长按回车选择「数组输入」
步骤2:提取内容到列前3位
- 在A1输入(若不想覆盖原数据,可在C1输入):
=INDEX(A:A, B1) - 在A2输入:
=INDEX(A:A, B1+1) - 在A3输入:
=INDEX(A:A, B1+2)
如果你的需求是提取所有连续3个单元格组合(每一组连续3个单独占一行,用逗号分隔),可在辅助列(比如B列)的B1单元格输入以下公式,下拉填充即可:
=IFERROR(INDEX(A:A, SMALL(IF((NOT(ISBLANK(A:A)) * NOT(ISBLANK(OFFSET(A:A,1,0))) * NOT(ISBLANK(OFFSET(A:A,2,0)))), ROW(A:A)), ROW(A1))) & ", " & INDEX(A:A, SMALL(IF((NOT(ISBLANK(A:A)) * NOT(ISBLANK(OFFSET(A:A,1,0))) * NOT(ISBLANK(OFFSET(A:A,2,0)))), ROW(A:A)), ROW(A1))+1) & ", " & INDEX(A:A, SMALL(IF((NOT(ISBLANK(A:A)) * NOT(ISBLANK(OFFSET(A:A,1,0))) * NOT(ISBLANK(OFFSET(A:A,2,0)))), ROW(A:A)), ROW(A1))+2), "")
注:此为数组公式,移动版输入后需长按回车选择「数组输入」触发计算
内容的提问来源于stack exchange,提问作者Rehan Khan
相关产品推荐
相关产品推荐

