目前我有一个for循环,循环遍历sheet1列P中的每个单元格以提取flavor类型,使用在Sheet0中名为Table的命名区域中找到的vlookup来获取价格,然后将价格乘以几个不同的数字列回到sheet1。然后它将相乘的列传输到sheet2。我将这些列转移回sheet1以替换原始值。
最后一部分我使用带复制和粘贴功能,功能很快。这是第一部分:
lastrow = wsSheet1.Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 to lastrow
erow = wsSheet2.Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Row
wsSheet2.Cells(erow, 1) = wsSheet1.Cells(i, 6) * Application.VLookup(wsSheet1.Cells(i, 16), wsSheet0.Range("Table"), 2, False)
wsSheet2.Cells(erow, 2) = wsSheet1.Cells(i, 7) * Application.VLookup(wsSheet1.Cells(i, 16), wsSheet0.Range("Table"), 2, False)
Next i
这个循环大约进行了10次,并且它是一个慢过程来引用P / 16列中的每个单元格,并将该值乘以并转移到sheet2。我想要一种更快的方法来做到这一点。
我尝试使用With
函数完成此替换过程,我将跳过转移到sheet2,并替换sheet1中的值 -
With wsSheet1.Range("F2:F" & lastrow)
.Value = Evaluate(.Address & "*" & [VLOOKUP('sheet1'!P2, 'sheet0'!FXTable, 2, FALSE)])
End With
但不确定如何使用动态变化的参考范围来完成这项工作,这样vlookup值就不会像上面那样固定在P2
答案 0 :(得分:0)
你可能正在寻找这样的东西:
lastrow = wsSheet1.Cells(Rows.Count, 1).End(xlUp).Row
erow = wsSheet2.Cells(Rows.Count, 2).End(xlUp).Row
Set rT = wsSheet0.Range("Table").Columns(1)
For i = 2 To lastrow
Price = rT.Find(wsSheet1.Cells(i, 16), LookIn:=xlValues).Cells(1, 2)
wsSheet2.Cells(erow + i - 1, 1) = wsSheet1.Cells(i, 6) * Price
wsSheet2.Cells(erow + i - 1, 2) = wsSheet1.Cells(i, 7) * Price
Next i
请告诉我们这种速度有多快。祝你好运!