2012-03-30 17 views
1

私は基本的にそう(私はメインシートウィンドウでセルB1に
"=A1*2" を入力してから10回上下その関数をドラッグすると等価になる範囲に値のいずれかを割り当てるために探していますB2=A2*2
B3=A3*2
、...、
Bn=An*2エクセル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 

私は一時変数に値を代入しようとすると、エラーがスローされます。私のように持っています私の方法は無効だと思っていますが、私はそれを修正することはできません。

ありがとうございます! 1行で

+0

エラーは何ですか?あなたはそれを質問に加えてください。ありがとうございます – bernie

答えて

3

だけ

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

+0

+1素敵なワンライナー –

+0

この返答いただきありがとうございます!もっと良い答えは – user1302187

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)を参照するのではなく、現時点でどのシートがアクティブになっているのかを参照します。

第2の点は、アレイ全体を一度に(またはその範囲全体を)乗算できないことです。要素をループして個々に掛けなければなりません。配列に範囲をロードし、その範囲をループすることを選択します。これを行うには、範囲のセルをループするよりも速くなるからです。これは、あなたが10個の細胞しか持たない場合はそれほど重要ではないかもしれませんが、もっと多くの細胞があれば確かにそうなります。

+0

+1です。また、解説のおかげで – bernie

+0

ありがとう、非常に有益! – user1302187