Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 2010 VBA单元数学_Excel_Vba - Fatal编程技术网

Excel 2010 VBA单元数学

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

我希望为某个范围指定一个值,该范围本质上等同于我键入的值 =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.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,因为它提供了一个更好的答案;另外,谢谢你的难以捉摸的评论