更快地循环遍历单元格以乘以vlookup值

时间:2018-05-25 22:54:42

标签: vba excel-vba excel

目前我有一个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

1 个答案:

答案 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

请告诉我们这种速度有多快。祝你好运!