Excel 2016 for Mac中查找上一个非空白行的兼容方案需求
Excel 2016 for Mac中查找上一个非空白行的兼容方案需求
嗨,我完全懂你的需求——在Excel 2016 for Mac这种不支持XMATCH的旧版本里,要精准定位指定列中当前行上方最近的非空白行,用来做后续统计计算对吧?下面给你两种实用方案,不用升级Office也能轻松解决问题:
一、纯公式方案(无需VBA,全兼容旧版本)
方案1:LOOKUP函数(推荐,无需数组公式)
这个方法操作最简单,不用按组合键确认。比如你在C6单元格要找C列上方最近的非空白行号,直接输入:
=LOOKUP(2,1/(C$1:C5<>""),ROW(C$1:C5))
原理拆解:
C$1:C5<>""会把C1到C5里的非空单元格标记为TRUE,空单元格标记为FALSE1/(...)会把TRUE转换成1,FALSE转换成#DIV/0!错误值LOOKUP(2, ...)会在数组里查找比所有有效值(1)都大的2,最终返回最后一个非错误值对应的行号
如果要直接引用那个非空单元格的值,把公式改成:
=INDEX(C:C, LOOKUP(2,1/(C$1:C5<>""),ROW(C$1:C5)))
方案2:INDEX+MAX+IF数组公式
适合习惯数组操作的用户,不过需要用数组公式的方式确认。同样在C6输入:
=INDEX(ROW(C$1:C5), MAX(IF(C$1:C5<>"", ROW(C$1:C5), 0)))
输入完成后,Mac上按Cmd+Shift+Enter(Windows是Ctrl+Shift+Enter)确认数组公式,Excel会自动给公式加上大括号{}。
原理拆解:
IF(C$1:C5<>"", ROW(C$1:C5), 0)会把非空单元格的行号保留,空单元格替换成0MAX(...)取出最大的行号(也就是最近的非空行)INDEX对应到行号返回结果
二、VBA自定义函数方案(灵活扩展)
如果公式满足不了更复杂的需求,或者你想让操作更直观,可以写个简单的自定义函数:
- 按下
Alt+F11打开VBA编辑器 - 右键左侧工程窗口→插入→模块,添加一个新模块
- 粘贴下面的代码:
Function LastNonBlankRow(targetColumn As Range, currentRow As Long) As Long Dim i As Long ' 从当前行的上一行开始向上遍历查找 For i = currentRow - 1 To 1 Step -1 ' 若要排除仅含空格的单元格,可改成If Trim(targetColumn.Cells(i, 1)) <> "" Then If Not IsEmpty(targetColumn.Cells(i, 1)) Then LastNonBlankRow = i Exit Function End If Next i ' 如果上方全是空行,返回0(可根据需求改成1或其他值) LastNonBlankRow = 0 End Function
- 保存工作簿(注意要保存为
.xlsm格式,因为包含宏)
之后在工作表里直接调用这个函数,比如C6单元格输入:
=LastNonBlankRow(C:C, ROW())
就能得到最近的非空白行号,要引用对应单元格值的话,用INDEX(C:C, LastNonBlankRow(C:C, ROW()))即可。
备注:内容来源于stack exchange,提问作者Steve Summit
相关产品推荐
相关产品推荐

