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

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

Set rngData = ThisWorkbook.Worksheets("Sheet1").Range("A1:B10") rngData = Evaluate(rngData.Address & "*2") 

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

我想避免循环的值,因为它是非常缓慢的。

你可以在Evaluate使用你现有的方法,但是稍微聪明一些 – 可以考虑条件等,所以只包括一个ISBLANK的testing。 这个例子在范围A1:C3的空白和非空白单元格的组合上进行testing – 只需更新您的范围,然后尝试一下:

 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 

我知道你有一个可以接受的答案,但是无论什么值得,你都不需要命名这个范围。 如果范围内的单元格包含文本,那么这个单行代码工作正常

 Sub MultiplyRangeByConstant() [A1:C3] = [IF(ISBLANK(A1:C3),"",IF(ISTEXT(A1:C3),A1:C3,2*A1:C3))] End Sub 

如果有公式或范围内的其他东西:

 '[a1:b3] = [{"=1","a";2,"=0/0";"",3}] [a1:b3] = [if(a1:b3="","",if(isNumber(a1:b3),a1:b3*2,a1:b3))] 

或者忽略公式,旧的PasteSpecial

 Set temp = [c1].EntireRow.Find("") ' any blank cell that is not in the range temp.Value = 2 temp.Copy [a1:b3].SpecialCells(xlCellTypeConstants).PasteSpecial , Operation:=xlMultiply temp.Value = ""