如何修改VBA循环列引用适配Sheet1与Sheet2列错位场景
修改Excel VBA脚本实现Sheet2数据写入Sheet1的AD-AF列
没问题,我帮你调整这段VBA代码,核心是把原来绑定在一起的源列(Sheet2的C-E)和目标列(Sheet1的C-E)拆分开,让Sheet2继续读取C-E列,而Sheet1写入AD-AF列。
关键修改点说明:
- 确定目标列号:Excel中AD列是第30列,AE是31,AF是32,所以Sheet1的目标列范围是30-32。
- 拆分j变量的双重作用:原来的
j同时对应Sheet2的源列(3-5)和Sheet1的目标列(3-5),现在我们保持j遍历Sheet2的3-5列,通过计算得到Sheet1的目标列号:30 + (j - 3)(或者简化为j + 27,因为3+27=30)。 - 同步更新高亮区域:原来的高亮代码针对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
相关产品推荐
相关产品推荐

