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

VBA通过遍历数组并按特定条件构建新数组的实现需求

提取Excel中每个0的前一个数值

问题说明

现有Excel一列数据,其中分布着非连续的0,需要构建另一列数据,筛选出每个0的前一个数字。示例数据集如下(需提取1、4、6):

5
1
0
4
0
820
4
6
0
74

现有初始VBA代码:

Sub Cat()   
  
      Range("V12").Select

      Do Until IsEmpty(ActiveCell)

         ActiveCell.Offset(1, 0).Select
      Loop
   
End Sub

解决方案

方法1:Excel公式法

如果数据在A列,想在B列得到结果:

  • 在B1单元格输入公式后下拉填充:

    =IF(A2=0,A1,"")
    

    逻辑:如果下一行是0,就显示当前行的数值,否则留空,后续筛选B列非空值即可得到所有目标数据。

  • 若使用Excel 365/2021,可直接用动态数组公式一步提取所有结果:

    =FILTER(A1:A9,A2:A10=0)
    

    注:A1:A9是原数据区域(排除最后一行,因为最后一行后面没有0),A2:A10是对应下一行的区域,公式会自动筛选出符合条件的数值并排列。

方法2:改进版VBA代码

针对你给出的初始代码,修改成能直接提取目标值的版本(假设原数据在V列从V12开始,结果输出到W列):

Sub ExtractPreZeroValue()
    Dim sourceCell As Range
    Dim resultCell As Range
    
    ' 设置源数据起始单元格
    Set sourceCell = Range("V12")
    ' 设置结果输出的起始单元格
    Set resultCell = Range("W12")
    
    Do Until IsEmpty(sourceCell)
        ' 检查当前单元格的下一行是否为0
        If sourceCell.Offset(1, 0).Value = 0 Then
            ' 将当前值写入结果列
            resultCell.Value = sourceCell.Value
            ' 结果单元格下移一行
            Set resultCell = resultCell.Offset(1, 0)
        End If
        ' 源单元格下移一行继续遍历
        Set sourceCell = sourceCell.Offset(1, 0)
    Loop
End Sub

运行这个宏后,W列会自动列出所有0的前一个数值,无需手动筛选。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:53:18