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

寻求公式/VBA方案:按倒序提取非空单元格至新列

提取每行倒数第N个非空单元格的解决方案

嘿,我来帮你搞定这个棘手的问题——不管每行最后一个非空单元格在哪一列,都能精准提取倒数第1、第2...个非空值到新列。下面给你两种实用方案,公式和VBA都有,按需选择~

一、公式方案(无需宏,直接用)

这个方案用FILTER+INDEX+COUNTA组合,灵活度拉满,能轻松提取任意倒数第N个非空值。

核心公式说明

假设你的数据在A2:Z2这个行范围里(可以根据实际列数调整):

  • 提取最后一个非空单元格:
    =INDEX(FILTER(A2:Z2,A2:Z2<>""),COUNTA(A2:Z2))
    
  • 提取倒数第二个非空单元格(如果非空数量不足2个,返回空值):
    =IF(COUNTA(A2:Z2)>=2,INDEX(FILTER(A2:Z2,A2:Z2<>""),COUNTA(A2:Z2)-1),"")
    
  • 提取倒数第N个:把上面公式里的-1改成-(N-1)就行,比如倒数第3个就是COUNTA(A2:Z2)-2,记得加IF判断避免报错。

示例演示

比如你的数据是这样:

ABCDE
苹果香蕉橙子
牛肉鸡肉鱼肉
牛奶

用公式提取后:

最后一个倒数第二个
橙子香蕉
鱼肉鸡肉
牛奶(空)

二、VBA自定义函数方案(更便捷,适合批量处理)

如果需要频繁提取不同倒数位置的值,写个自定义函数会更省心,一次定义,终身使用~

步骤1:插入VBA代码

  1. 打开Excel,按Alt+F11打开VBA编辑器
  2. 右键左侧的工作簿名称 → 插入 → 模块
  3. 粘贴下面的代码:
Function GetNthLastNonEmpty(rng As Range, n As Integer) As Variant
    Dim cell As Range
    Dim nonEmptyList As New Collection
    
    ' 遍历目标行,收集所有非空值(忽略空格干扰)
    For Each cell In rng
        If Trim(cell.Value) <> "" Then
            nonEmptyList.Add cell.Value
        End If
    Next cell
    
    ' 根据n返回对应值,数量不足则返回空
    If nonEmptyList.Count >= n Then
        GetNthLastNonEmpty = nonEmptyList(nonEmptyList.Count - n + 1)
    Else
        GetNthLastNonEmpty = ""
    End If
End Function

步骤2:使用自定义函数

回到Excel表格,直接在单元格里输入:

  • 提取最后一个:=GetNthLastNonEmpty(A2:E2,1)
  • 提取倒数第二个:=GetNthLastNonEmpty(A2:E2,2)
  • 提取倒数第3个:=GetNthLastNonEmpty(A2:E2,3)

这个函数会自动忽略空格和空单元格,非常靠谱~

兼容旧版本Excel的替代方案

如果你的Excel版本是2019及以前,FILTER函数无法使用,可以用LOOKUP替代提取最后一个非空值:

=LOOKUP(2,1/(A2:Z2<>""),A2:Z2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:15:45