按价值乘以整个范围?

所以我能想到的在大范围(约450k行)上完成这个工作的最好方法是使用下面的Sue-do代码:

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

现在这个工作,但我必须复制和粘贴该值的事实似乎是多余的,因为值永远不会改变。

 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 

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

我也试过:

 With Range("MyTable[MyColumnHeader]") .Value = .Value * 453.592 End With 

但如果列中有多个值,则收到运行时错误types不匹配错误。

我想插入一列,并使用"=R-1C * 453.592"然后.Value = .Value ,然后移动列和覆盖,但似乎笨重,我会觉得也比较慢的粘贴乘法。

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

 Sub Test() Dim rngData As Range Set rngData = ThisWorkbook.Worksheets("Sheet1").Range("A1:B10") rngData = Evaluate(rngData.Address & "*2") End Sub 

过时了,但是你在找什么?

不要逐个更新。 这是非常缓慢的,有一个更好的方式与VBA。 这是纲要:

  1. 将Range设置为需要处理的所有行/列
  2. 将值复制到VBA中的数组中
  3. 处理数组
  4. 在一个操作中将数组写回工作表

这里是一个例子:

 Public Sub FactorRange(ByRef r_first as Range, ByVal N_rows as Long, _ ByVal N_cols as Long, ByVal factor as Double) Dim r as Range 'Set range from first cell and size Set r = f_first.Resize(N_rows,N_cols) Dim vals() as Variant ' Copy cell values into array vals = r.Value Dim i as Long, j as Long ' Do the math For i=1 to N_rows For j=1 to N_cols vals(i,j) = factor * vals(i,j) Next j Next i ' Write values back r.Value = vals End Sub 
 return_sheet = ActiveSheet.Name ActiveWorkbook.Sheets.Add ActiveSheet.Name = "CopyPaste" Selection.Value = 1 Selection.Copy Sheets(return_sheet).Select 'if necessary select range you whant to multiply Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False Application.DisplayAlerts = False Sheets("CopyPaste").Delete Application.DisplayAlerts = True Sheets(return_sheet).Select