Excel如何用公式方法检测单元格或区域是否为合并单元格?
非VBA实现合并单元格检测、跨合并单元格取值的方案如下:
1. 检测单元格/区域是否包含合并单元格
全Excel版本通用方案(宏表函数,无需写VBA)
宏表函数GET.CELL原生支持判断合并单元格属性,只需提前定义名称即可调用:
- 打开目标工作表,点击「公式」选项卡→「定义名称」
- 名称栏输入
IS_MERGED,引用位置填入=GET.CELL(40, INDIRECT("RC", FALSE)),范围选择「工作簿」后确认 - 后续在任意单元格输入
=IS_MERGED即可判断当前单元格是否为合并单元格,返回TRUE为是,FALSE为否 - 若要判断某区域(如A1:C10)是否包含合并单元格,可输入数组公式:
=OR(IFERROR(GET.CELL(40, OFFSET(A1, ROW(1:10)-1, COLUMN(A:C)-1)), 0)),按Ctrl+Shift+Enter回车后返回TRUE即代表区域内有合并单元格
注意:使用宏表函数的工作簿需要保存为.xlsm启用宏格式,避免自定义名称失效。
Excel 365/2021 简化方案
无需定义名称,直接输入公式即可判断区域是否包含合并单元格:=COUNT(TOCOL(A1:C10, 3)) <> COUNTA(A1:C10)
返回TRUE即代表区域内存在合并单元格。
2. 忽略合并单元格、提取连续有效值(对应需求的返回I5:I9效果)
Excel 365/2021 方案
直接用TOCOL过滤无效0值即可,在目标单元格输入:=TOCOL(C5:D9, 1)
公式会自动跳过合并单元格位置的0值、空值,直接输出连续的有效值数组,无需下拉填充。
旧版Excel 兼容方案
使用INDEX+SMALL组合数组公式,在首个目标单元格输入:=IFERROR(INDEX($C$5:$D$9, SMALL(IF($C$5:$D$9<>0, ROW($C$5:$D$9)-ROW($C$5)+1), ROW(A1)), MOD(SMALL(IF($C$5:$D$9<>0, (ROW($C$5:$D$9)-ROW($C$5)+1)*100 + COLUMN($C$5:$D$9)-COLUMN($C$5)+1), ROW(A1)), 100)), "")
输入完成后按Ctrl+Shift+Enter触发数组计算,下拉填充到足够行数即可获取所有有效值。
内容的提问来源于stack exchange,提问作者SoftTimur
相关产品推荐
相关产品推荐

