Excel 2010 VBA单元数学
我希望为某个范围指定一个值,该范围本质上等同于我键入的值 =A1*2 在主工作表窗口的单元格B1中,然后向下拖动该函数10次,使B2=A2*2 B3=A3*2 ,..., Bn=An*2 尝试将值分配给temp变量时引发错误。我怀疑我的方法无效,但我似乎无法修复它 谢谢 就在一行中 此工作簿.Worksheetssheetname.RangeB1:B10.FormulaR1C1==RC[-1]*2仅在一行中Excel 2010 VBA单元数学,excel,vba,Excel,Vba,我希望为某个范围指定一个值,该范围本质上等同于我键入的值 =A1*2 在主工作表窗口的单元格B1中,然后向下拖动该函数10次,使B2=A2*2 B3=A3*2 ,..., Bn=An*2 尝试将值分配给temp变量时引发错误。我怀疑我的方法无效,但我似乎无法修复它 谢谢 就在一行中 此工作簿.Worksheetssheetname.RangeB1:B10.FormulaR1C1==RC[-1]*2仅在一行中 ThisWorkbook.Worksheetssheetname.RangeB1:B10
ThisWorkbook.Worksheetssheetname.RangeB1:B10.FormulaR1C1==RC[-1]*2假设您想要的是问题中指定的值,而不是公式,我将以这种方式重写代码:
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
请注意,您必须使用。点如果您不这样做,您就没有正确地限定属性;他们不会引用此工作簿。工作表SheetsName,而是引用当前处于活动状态的任何工作表
第二点是,你不能一次乘上整个数组,也不能乘上整个范围。您必须循环遍历元素,并将它们分别相乘。我选择将范围加载到一个数组中,并在其中循环,因为这样做比在一个范围的单元格中循环快几个数量级。如果你只有10个细胞,这可能没有多大关系,但如果你有更多的细胞,这肯定会有多大关系 假设您想要的是问题中指定的值,而不是公式,我将以这种方式重写您的代码:
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
请注意,您必须使用。点如果您不这样做,您就没有正确地限定属性;他们不会引用此工作簿。工作表SheetsName,而是引用当前处于活动状态的任何工作表
第二点是,你不能一次乘上整个数组,也不能乘上整个范围。您必须循环遍历元素,并将它们分别相乘。我选择将范围加载到一个数组中,并在其中循环,因为这样做比在一个范围的单元格中循环快几个数量级。如果你只有10个细胞,这可能没有多大关系,但如果你有更多的细胞,这肯定会有多大关系 怎么了?请你把它加到问题上好吗?谢谢你怎么了?请你把它加到问题上好吗?谢谢你+1给出了一个更好的答案;另外,感谢你的难以捉摸的评论+1,因为它提供了一个更好的答案;另外,谢谢你的难以捉摸的评论