Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何更改此for循环的列引用_Excel_Vba - Fatal编程技术网

Excel 如何更改此for循环的列引用

Excel 如何更改此for循环的列引用,excel,vba,Excel,Vba,我在这个脚本中使用了虚拟数据:它只是更新我在表2中输入的值,并使用数组乘数将它们应用于表1中的rIterators匹配的地方。对于这个问题,这些都不是必需的,我只需要知道如何更新我的j变量引用 目前是: For j = 3 To 5 wsA.Cells(fndRow + i, j).Value = rIterator.Offset(, j - 1).Value * multplr(i) Next j 它引用了两张表中的C-E列,因为这是值

我在这个脚本中使用了虚拟数据:它只是更新我在表2中输入的值,并使用数组乘数将它们应用于表1中的
rIterators
匹配的地方。对于这个问题,这些都不是必需的,我只需要知道如何更新我的
j
变量引用

目前是:

        For j = 3 To 5
            wsA.Cells(fndRow + i, j).Value = rIterator.Offset(, j - 1).Value * multplr(i)
        Next j
它引用了两张表中的C-E列,因为这是值对齐的地方

如果Sheet2的C-E列中有需要更新的值,但Sheet1的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
            wsA.Cells(fndRow + i, j).Value = rIterator.Offset(, j - 1).Value * multplr(i)
        Next j
    Next i
        wsA.Range(wsA.Cells(fndRow, 3), wsA.Cells(fndRow, 5)).Resize(5).Interior.Color = RGB(255, 255, 0)
    End If
    Err.Clear
Next rIterator

End Sub
Sub-UpdateTSRS()
将wbk设置为工作簿
将wsA设置为工作表,将wsB设置为工作表
Dim rngA作为范围,rngB作为范围
变暗器作为射程
长得一样
Dim MULTPRR作为变型
multplr=数组(1,1.1,1.15,1.2,1.3)
设置wbk=thishworkbook
设置wsA=wbk.Sheets(“Sheet1”)
设置wsB=wbk.Sheets(“Sheet2”)
设置rngA=wsA.Range(wsA.Range(“A2”)、wsA.Range(“A2”).End(xlDown))
设置rngB=wsB.Range(wsB.Range(“A2”)、wsB.Range(“A2”).End(xlDown))
对于rngB中的每个rIterator
出错时继续下一步
fndRow=Application.Match(rIterator.Value,rngA,0)+_
rngA.范围(“A1”).第1行
如果错误号为0,则
其他的
对于i=0到4
对于j=3到5
wsA.Cells(fndRow+i,j).Value=rIterator.Offset(,j-1).Value*multplr(i)
下一个j
接下来我
wsA.Range(wsA.Cells(fndRow,3),wsA.Cells(fndRow,5)).Resize(5).Interior.Color=RGB(255,255,0)
如果结束
呃,明白了
下一个编剧
端接头

显示我的评论中的代码更改:

'Set wsA = wbk.Sheets("Sheet1")
'Set wsB = wbk.Sheets("Sheet2")
Set wsB = wbk.Sheets("Sheet1")
Set wsA = wbk.Sheets("Sheet2")
您的循环类似于:

For j = 3 To 5
    wsA.Cells(fndRow + i, j).Value = rIterator.Offset(, j +27 - 1).Value * multplr(i)  'i think i got that?  destination still C->E but source is AD->AF
Next j

AD=30(26=z,27=aa,28=ab,29=ac),然后转到32(AF)。。。由于C仍然是目的地,您的
Cells()
reference应该为C中的AD指示
+27
,为E中的AF指示
+29
。如果您以前使用的是Sheet2(源)到Sheet1(目的地),那么您希望将您的引用替换为Sheet1(源)到Sheet2(目的地)。基本上,更改for循环范围并交换
set wsA
set wsB
的工作表。对不起,我认为我的措辞不好。图纸没有交换,但是Sheet1(更新值的目的地)现在将这些值放置在列AD-AF中,而不是C-E中。因此,添加到偏移量似乎仍然填充列C-E中的0,并且对AD-AFwhoops不做任何操作,只需要翻转+37即可解决!我打错了,应该是+27。。。但是你明白了!