2012-03-30 120 views
1

我期待分配一个值的范围,将基本相当于我在B1单元格在主表窗口中键入
"=A1*2" ,然后拖曳功能下降了10倍(使B2=A2*2
B3=A3*2
,...,
Bn=An*2Excel 2010中VBA细胞数学

With ThisWorkbook.Worksheets(sheetname) 
    Dim temp As Range, temp2 As Range 
    Set temp = Range(Cells(1, 1), Cells(10, 1)) 
    Set temp2 = Range(Cells(1, 2), Cells(10, 2)) 
    temp2.Value = temp.Value * 2 
End With 

当我尝试值分配给临时变量将引发错误。我有作为我们的方法是无效的,但我似乎无法修复它。

谢谢!

+0

什么是错误?你能否将其添加到问题中?谢谢 – bernie 2012-03-30 01:32:08

回答

3

在一行刚刚

ThisWorkbook.Worksheets(sheetname).Range("B1:B10").FormulaR1C1 = "=RC[-1]*2"

+0

+1不错的单行程 – 2012-03-30 07:18:29

+0

谢谢你的回应! – user1302187 2012-04-03 04:37:16

1

这是我怎么会重写代码,假设你想要的值(这是你在问题中指定的),而不是公式:

Dim temp As Variant 
Dim nRows As Long 
Dim iRow As Long 
Dim sheetname As String 

sheetname = "Sheet1" 'or whatever 
nRows = 10 

With ThisWorkbook.Worksheets(sheetname) 
    temp = .Range(.Cells(1, 1), .Cells(nRows, 1)) 'Load range to a variant array 
    For iRow = 1 To nRows 'Loop through array to multiply elements by 2 
     temp(iRow, 1) = temp(iRow, 1) * 2 
    Next iRow 
    .Range(.Cells(1, 2), .Cells(nRows, 2)) = temp 'Write array back to range 
End With 

请注意,您必须说.Range.Cells.点。如果你不这样做,你不能正确地评估属性;他们将不会引用ThisWorkbook.Worksheets(sheetname),而是指此时发生的任何表单处于活动状态。

第二点是,你不能一次乘以整个数组(或整个范围,就此而言)。你必须遍历元素并将它们单独乘。我选择将范围加载到一个数组,然后遍历它,因为这样做比循环遍历一个范围的单元要快几个数量级。如果你只有10个单元,这可能并不重要,但如果你有更多的单元,它肯定会有用。

+0

+1更好的答案;同样,感谢您的澄清评论 – bernie 2012-03-30 14:58:53

+0

谢谢,非常翔实! – user1302187 2012-04-03 04:37:02