将范围内的每个值乘以常数,但跳过空白单元格

V.K*_*.K. 4 excel vba

我需要一个简单的快速解决方案,用于将范围内的所有值乘以 VBA 代码中的数值。我知道这个解决方案:按值乘以整个范围?

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

但它有一个很大的缺点——如果原始单元格是空白的,则结果为零。如何强制它跳过空白值?

我想避免遍历这些值,因为它非常慢。

Rob*_*zie 5

你可以使用你现有的方法,Evaluate但让它变得更聪明——它可以接受条件等,所以只需包括一个ISBLANK. 此示例在范围内的空白和非空白单元格的组合上进行测试A1:C3- 只需更新您的范围并尝试一下:

Option Explicit

Sub Test()

    Dim rng As Range

    Set rng = Sheet1.Range("A1:C3")

    'give the name a range so we can refer to it in evaluate
    rng.Name = "foo"

    'using Evaluate
    rng = Evaluate("IF(ISBLANK(foo),"""",foo*2)")

    'using [] notation
    'preferred IMO as dont need to escape "
    rng = [IF(ISBLANK(foo),"",foo*2)]

End Sub
Run Code Online (Sandbox Code Playgroud)