按价值乘以整个范围?
所以我能想到的在大范围(约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。 这是纲要:
- 将Range设置为需要处理的所有行/列
- 将值复制到VBA中的数组中
- 处理数组
- 在一个操作中将数组写回工作表
这里是一个例子:
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