寻求公式/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判断避免报错。
示例演示
比如你的数据是这样:
| A | B | C | D | E |
|---|---|---|---|---|
| 苹果 | 香蕉 | 橙子 | ||
| 牛肉 | 鸡肉 | 鱼肉 | ||
| 牛奶 |
用公式提取后:
| 最后一个 | 倒数第二个 |
|---|---|
| 橙子 | 香蕉 |
| 鱼肉 | 鸡肉 |
| 牛奶 | (空) |
二、VBA自定义函数方案(更便捷,适合批量处理)
如果需要频繁提取不同倒数位置的值,写个自定义函数会更省心,一次定义,终身使用~
步骤1:插入VBA代码
- 打开Excel,按
Alt+F11打开VBA编辑器 - 右键左侧的工作簿名称 → 插入 → 模块
- 粘贴下面的代码:
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
相关产品推荐
相关产品推荐

