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

Excel VBA多条件复制值问题:按货币类型拆分负数到指定列

问题原因

原有代码的目标行使用lastRow + i计算,i是M列的遍历行号,不符合筛选条件的行不会写入内容,对应目标位置自然留白,因此产生间隔空行,同时起始写入位置也不符合lastRow+2的要求。

正确实现代码
Dim lastRow As Long, cadRow As Long, usdRow As Long
Dim CurrencyValue As String, NumberValue As Double

' 获取M列最后一行行号
lastRow = wsA.Cells(wsA.Rows.Count, "M").End(xlUp).Row
' 初始化CAD、USD列的起始写入行,从lastRow+2开始
cadRow = lastRow + 2
usdRow = lastRow + 2

For i = 3 To lastRow
    ' 显式指定工作表,避免跑错表
    CurrencyValue = wsA.Cells(i, "M").Value
    NumberValue = wsA.Cells(i, "N").Value
    
    If CurrencyValue = "CAD" And NumberValue < -0.05 Then
        ' 直接赋值粘贴值,比Copy方法效率更高,无剪贴板操作
        wsA.Cells(cadRow, "K").Value = NumberValue
        ' 写入后行号+1,下次写入下一行,无空行
        cadRow = cadRow + 1
    ElseIf CurrencyValue = "USD" And NumberValue < -0.05 Then
        wsA.Cells(usdRow, "L").Value = NumberValue
        usdRow = usdRow + 1
    End If
Next i
代码说明
  • 新增cadRow、usdRow两个独立计数器,分别控制K列、L列的写入位置,只有符合条件的内容才会触发行号递增,不会产生空行
  • 所有单元格操作都显式绑定wsA工作表,避免切换活动工作表导致的写入错位
  • 直接通过Value赋值实现值粘贴,比Copy方法执行效率更高,也不会带出原单元格的格式、公式等内容
  • 如果需要保留原单元格格式,可以把赋值逻辑替换为wsA.Range("N" & i).Copy Destination:=wsA.Cells(cadRow, "K")即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:09:04