1

これを行う簡単な方法はありますか?

たとえば、2つの行があります

AB

34 5
56 6
34 3
25 2

次の計算を行の下で実行したいと思います。

A1 = A1 + B1
A2 = A2 + B2
A3 = A3 + B3
...。

今、私は次のような行をループするマクロでこれを行うことができます

for x = 1 to 500
sheet1.cells(x,1).vlaue = sheet1.cells(x,1).vlaue + sheet1.cells(x,2).vlaue
next x

しかし、範囲などを使用して、単一のステップとして実行できる、より効率的な方法はありますか?

乾杯

4

3 に答える 3

3

簡単な方法は、即時ウィンドウから入力することです。

[a1:a500]=[a1:a500+b1:b500]

角かっこはEvaluate関数のショートカットです

于 2012-07-29T11:26:05.263 に答える
1

私は2つのオプションを考えることができます:

オプション1

Copy、、Paste Specialを使用しますAdd

Sub AddStep()
    Dim rng1 As Range, rng2 As Range

    Set rng1 = Range([A1], [A1].End(xlDown))
    Set rng2 = rng1.Offset(, 1)
    rng2.Copy
    rng1.PasteSpecial xlPasteValues, xlPasteSpecialOperationAdd
    Application.CutCopyMode = False

End Sub

オプション2

バリアント配列をループします。これは、範囲をループするよりもはるかに高速です

Sub AddStep()
    Dim rng As Range
    Dim dat As Variant
    Dim i As Long

    Set rng = Range([B1], [A1].End(xlDown))
    dat = rng
    For i = LBound(dat, 1) To UBound(dat, 1)
        dat(i, 1) = dat(i, 1) + dat(i, 2)
    Next
    rng = dat
End Sub

オプション1の方が高速ですが、状況によってはクリップボードを避けるのが最善です。
1,000,000行のサンプルでテスト済み:
オプション1-435ms
オプション2-2589ms

于 2012-07-29T01:14:32.697 に答える
0

私が行う方法は、最初の行の数式を作成し、その後のすべての行を選択して、を押すことCtrl+Dです。これはあなたが求めているものではありませんか?私がその質問を誤解しない限り。

于 2012-07-29T00:02:35.673 に答える