【问题标题】:Faster way to loop through cells to multiply vlookup value更快地循环单元格以乘以 vlookup 值的方法
【发布时间】:2018-05-25 22:54:42
【问题描述】:

目前我有一个 for 循环,它遍历 sheet1 列 P 中的每个单元格以提取风味类型,使用在 sheet0 中名为 Table 的命名范围中找到的 vlookup 来获取价格,然后将价格乘以几个不同的数字列回到sheet1。然后它将相乘的列传输到 sheet2。我将这些列转移回 sheet1 以替换原始值。

最后一部分我使用了带有复制和粘贴功能的 with 函数,它运行很快。这是第一部分:

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

【问题讨论】:

标签: vba excel


【解决方案1】:

您可能正在寻找这样的东西:

    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

请让我们知道它以这种方式运行的速度有多快。祝你好运!

【讨论】:

  • 所以,在rT = 行出现Method 'Range' of object '_Worksheet failed 错误,因此将其更改为rt = wsSheets0.Cells("Table").Column(1),它快了几秒钟,但它没有乘以价格!刚刚复制并粘贴的数字。
  • 我不知道 rt = wsSheets0.Cells("Table").Column(1) 做了什么,但它在几个层面上对我来说都是错误的......我根本无法想象它实际上是如何运行的。您能否展示为您运行的连续代码部分?我渴望学习,拜托。
猜你喜欢
  • 1970-01-01
  • 2013-11-18
  • 2020-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 2017-02-08
相关资源
最近更新 更多