按价值乘以整个范围?

use*_*261 5 excel vba excel-vba

所以我能想到的最好的方法是在大范围内(大约450k行)实现这个目的是使用以下Sue-do代码:

Range("A1").Copy ' A1 Contains Value I want to multiply column by
Range("MyTable[FooColumn]").PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply
Run Code Online (Sandbox Code Playgroud)

现在这样可行,但事实上我必须复制并粘贴该值似乎是多余的,因为值永远不会改变.

For Each c In Range("MyTable[MyColumnHeader]")
    If IsNumeric(c) And Not c = "" Then
        c.Value = c.Value * 453.592 ' The value that is in A1 from previos sample
    End If
Next
Run Code Online (Sandbox Code Playgroud)

这有效,但速度较慢.因为它必须循环每个细胞.

我也尝试过:

With Range("MyTable[MyColumnHeader]")
    .Value = .Value * 453.592
End With
Run Code Online (Sandbox Code Playgroud)

但是如果列中有多个值,则收到运行时错误类型不匹配错误.

我考虑插入一个列并使用"=R-1C * 453.592"Then 的formulaR1C1 .Value = .Value然后移动列并覆盖,但看起来很笨重,我认为也比粘贴倍增慢.

那么,有没有人有更好的方法来完成这项任务?

小智 9

Sub Test()

    Dim rngData As Range

    Set rngData = ThisWorkbook.Worksheets("Sheet1").Range("A1:B10")
    rngData = Evaluate(rngData.Address & "*2")
End Sub
Run Code Online (Sandbox Code Playgroud)

有点过时但是你在寻找什么?

  • @NeverStopLearning 为什么你不编辑答案,以便 VBA 新手(就像我一样)可以正确使用代码?:C (3认同)
  • 对于任何试图使用它的人,不要忘记将rngData分配回范围,否则工作表本身没有变化(呃!). (2认同)