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

如何修改VBA循环列引用适配Sheet1与Sheet2列错位场景

修改Excel VBA脚本实现Sheet2数据写入Sheet1的AD-AF列

没问题,我帮你调整这段VBA代码,核心是把原来绑定在一起的源列(Sheet2的C-E)和目标列(Sheet1的C-E)拆分开,让Sheet2继续读取C-E列,而Sheet1写入AD-AF列。

关键修改点说明:

  1. 确定目标列号:Excel中AD列是第30列,AE是31,AF是32,所以Sheet1的目标列范围是30-32。
  2. 拆分j变量的双重作用:原来的j同时对应Sheet2的源列(3-5)和Sheet1的目标列(3-5),现在我们保持j遍历Sheet2的3-5列,通过计算得到Sheet1的目标列号:30 + (j - 3)(或者简化为j + 27,因为3+27=30)。
  3. 同步更新高亮区域:原来的高亮代码针对C-E列,现在要改成AD-AF列的范围。

修改后的完整代码

Sub UpdateTSRS()
    Dim wbk As Workbook
    Dim wsA As Worksheet, wsB As Worksheet
    Dim rngA As Range, rngB As Range
    Dim rIterator As Range
    Dim fndRow As Long
    Dim multplr As Variant
    multplr = Array(1, 1.1, 1.15, 1.2, 1.3)
    Set wbk = ThisWorkbook
    Set wsA = wbk.Sheets("Sheet1")
    Set wsB = wbk.Sheets("Sheet2")
    Set rngA = wsA.Range(wsA.Range("A2"), wsA.Range("A2").End(xlDown))
    Set rngB = wsB.Range(wsB.Range("A2"), wsB.Range("A2").End(xlDown))
    For Each rIterator In rngB
        On Error Resume Next
        fndRow = Application.Match(rIterator.Value, rngA, 0) + _
        rngA.Range("A1").Row - 1
        If Err.Number <> 0 Then
        Else
            For i = 0 To 4
                For j = 3 To 5
                    ' 修改:Sheet1目标列改为AD-AF(30-32),保持Sheet2源列C-E(3-5)不变
                    wsA.Cells(fndRow + i, 30 + (j - 3)).Value = rIterator.Offset(, j - 1).Value * multplr(i)
                Next j
            Next i
            ' 修改:高亮区域同步改为AD-AF列
            wsA.Range(wsA.Cells(fndRow, 30), wsA.Cells(fndRow, 32)).Resize(5).Interior.Color = RGB(255, 255, 0)
        End If
        Err.Clear
    Next rIterator
End Sub

额外说明

如果你觉得列号数字不够直观,也可以用Excel的列名转换写法,比如wsA.Cells(fndRow + i, "AD").Offset(, j - 3),不过直接用列号的执行效率会更高一些。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:22:47