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

如何在Excel中筛选已填写值并在另一工作表无空白行展示?

两种简单方法实现你的需求

方法一:纯Excel函数实现(无需编程)

假设你的原始数据工作表名叫参数列表,数据结构为:A列=参数名称,B列=参数值,C列=单位;目标工作表名叫已填参数。

操作步骤:

  • 在已填参数的A1单元格输入公式:
    =IFERROR(INDEX(参数列表!A:A,SMALL(IF(参数列表!B:B<>"",ROW(参数列表!B:B)),ROW(A1))),"")
    
  • 输入完成后,Excel 2019及更早版本需按Ctrl+Shift+Enter确认(数组公式要求);Excel 365/2021直接回车即可。
  • 把A1的公式拖动到B1,修改B1公式中的参数列表!A:A为参数列表!C:C,让B列显示对应单位。
  • 选中A1和B1,一起向下拖动公式,直到出现空白单元格停止——此时显示的都是B列有填写值的参数名和单位,无空白行。

公式逻辑:用IF筛选出B列非空的行号,SMALL按顺序取出这些行号,INDEX匹配对应参数名和单位,IFERROR避免超出范围时显示错误值。

方法二:一键VBA宏(适合批量更新)

如果需要频繁更新数据,宏的效率更高:

  1. 打开Excel,按Alt+F11打开VBA编辑器。
  2. 右键左侧的工作簿名称,选择插入→模块,粘贴以下代码:
    Sub 提取已填参数()
        Dim 源表 As Worksheet, 目标表 As Worksheet
        Dim 源行 As Integer, 目标行 As Integer
        
        ' 修改为你的实际工作表名称
        Set 源表 = ThisWorkbook.Worksheets("参数列表")
        Set 目标表 = ThisWorkbook.Worksheets("已填参数")
        
        ' 清空目标表现有内容(需保留表头可删除此行)
        目标表.Cells.Clear
        
        目标行 = 1
        ' 从第2行开始遍历(源表第1行是表头),无表头则改为1
        For 源行 = 2 To 源表.Cells(源表.Rows.Count, "B").End(xlUp).Row
            If 源表.Cells(源行, "B").Value <> "" Then
                目标表.Cells(目标行, "A") = 源表.Cells(源行, "A")
                目标表.Cells(目标行, "B") = 源表.Cells(源行, "C")
                目标行 = 目标行 + 1
            End If
        Next 源行
        
        MsgBox "提取完成!"
    End Sub
    
  3. 修改代码中的"参数列表"和"已填参数"为你的实际工作表名,无表头则把源行=2改为源行=1。
  4. 按F5运行宏,或回到Excel点击开发工具→宏,选择提取已填参数执行。
  5. 保存文件时需选择.xlsm格式(启用宏的工作簿),否则宏会丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 22:35:07