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

VBA实现可见行逐行计算并写入E列的技术需求问询

解决方案

完整修正后的VBA代码

Sub Calculate_Average_Deposition_Rate()
    
    Dim LastRow As Long
    Dim Dia As Double, WFS As Double ' 改为Double类型,支持小数数值
    Dim ws As Worksheet
    Dim Pi As Double ' 声明圆周率变量
    Dim rng3 As Range
    Dim area As Range
    Dim row As Range
    
    ' 关闭屏幕更新和事件,提升运行效率
    With Application
        .ScreenUpdating = False
        .EnableEvents = False
    End With ' 补充结束With语句,原代码遗漏
    
    Set ws = Worksheets("2023") ' 直接绑定工作表,避免依赖Activate操作
    
    ' 用数据列(B列)找最后一行,比E列更准确(E列可能为空)
    LastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
    
    Pi = 3.14159265358979 ' 定义圆周率
    
    ' 清空E列从第6行开始的计算结果
    ws.Range("E6:E" & LastRow).Clear
    
    ' 获取筛选后可见的B6:C区域
    On Error Resume Next ' 处理无可见行的异常情况
    Set rng3 = ws.Range("B6:C" & LastRow).SpecialCells(xlCellTypeVisible)
    On Error GoTo 0
    
    If Not rng3 Is Nothing Then
        ' 遍历筛选后的每个不连续区域
        For Each area In rng3.Areas
            ' 遍历区域内的每一行
            For Each row In area.Rows
                ' 读取当前行的B列(d)和C列(WFS)值
                Dia = row.Cells(1).Value
                WFS = row.Cells(2).Value
                
                ' 执行公式计算,结果写入同行E列
                ws.Cells(row.Row, "E").Value = WFS * 60 * (Pi * (Dia * Dia / 4)) * 0.284
            Next row
        Next area
    End If
    
    ' 恢复屏幕更新和事件
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
    End With
    
End Sub

关键修改与说明

  • 变量类型调整:把Dia和WFS从Long改为Double,因为直径、流量这类数值大概率带小数,Long只能存整数会丢失精度。
  • 工作表引用优化:直接绑定工作表对象,不用Activate切换界面,代码更稳定高效。
  • 最后一行判断:改用B列(原始数据列)定位最后一行,避免E列空值导致的判断错误。
  • 异常处理:添加错误捕获逻辑,防止筛选后无可见行时代码报错。
  • 可见行遍历逻辑:筛选后的区域可能是多个不连续块,通过嵌套循环遍历每个区域的每一行,确保所有可见行都被处理。
  • 公式实现:直接按给定公式计算后赋值到E列,比写入单元格公式的执行效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 02:55:32