You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel提取非空白单元格相对位置并合并至单个单元格方法求助

解决方案(旧版Excel适用)

方案一:数组公式法(无需宏)

如果你的数据区域是A2:A9,可以使用以下数组公式(输入后需按Ctrl+Shift+Enter确认,旧版Excel必须手动触发数组计算):

=LEFT(TEXT(SMALL(IF(NOT(ISBLANK(A2:A9)),ROW(A2:A9)-ROW(A2)+1,""),ROW(INDIRECT("1:"&COUNTA(A2:A9)))),"0,"),LEN(TEXT(SMALL(IF(NOT(ISBLANK(A2:A9)),ROW(A2:A9)-ROW(A2)+1,""),ROW(INDIRECT("1:"&COUNTA(A2:A9)))),"0,"))-1

公式解析:

  • NOT(ISBLANK(A2:A9)):筛选出区域内的非空白单元格
  • ROW(A2:A9)-ROW(A2)+1:计算每个非空白单元格相对于区域起始位置(A2)的序号(A2对应1,A3对应2,以此类推)
  • SMALL(...,ROW(INDIRECT("1:"&COUNTA(A2:A9)))):按顺序提取所有非空白单元格的相对位置
  • TEXT(..., "0,"):给每个位置添加逗号分隔符
  • LEFT(..., LEN(...)-1):移除最后一个多余的逗号

方案二:VBA自定义函数(适合重复使用)

如果需要频繁处理这类需求,可创建自定义函数:

  1. 按Alt+F11打开VBA编辑器
  2. 右键点击当前工作簿 → 插入 → 模块
  3. 粘贴以下代码:
Function GetNonBlankPositions(rng As Range) As String
    Dim cell As Range
    Dim posStr As String
    Dim relPos As Integer
    
    posStr = ""
    relPos = 1
    
    For Each cell In rng
        If Not IsEmpty(cell.Value) Then
            If posStr <> "" Then posStr = posStr & ","
            posStr = posStr & CStr(relPos)
        End If
        relPos = relPos + 1
    Next cell
    
    GetNonBlankPositions = posStr
End Function
  1. 保存工作簿为启用宏的工作簿(.xlsm)
  2. 在单元格中使用函数:=GetNonBlankPositions(A2:A9),即可直接得到汇总后的位置字符串

内容的提问来源于stack exchange,提问作者Jean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 00:15:09