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自定义函数(适合重复使用)
如果需要频繁处理这类需求,可创建自定义函数:
- 按
Alt+F11打开VBA编辑器 - 右键点击当前工作簿 → 插入 → 模块
- 粘贴以下代码:
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
- 保存工作簿为启用宏的工作簿(.xlsm)
- 在单元格中使用函数:
=GetNonBlankPositions(A2:A9),即可直接得到汇总后的位置字符串
内容的提问来源于stack exchange,提问作者Jean
相关产品推荐
相关产品推荐

