0

値として数値を持つ2つの列AとBがあります。

  • C1で欲しい=A1 + B1
  • C2で欲しい=A2 + B2

等々。私は次の VBA コードを書きました。

私の最後の行が A10 だとしましょう。コードを実行すると、C11 に「0」が追加されます。これを防ぐにはどうすればよいですか?

Sub macro()

Dim R As Long
R = 1
Do
Cells(R, "C").Select
R = R + 1
ActiveCell.Formula = "=sum(" & ActiveCell.Offset(0, -2) & "," & 
ActiveCell.Offset(0, -1)    & ")"
Loop Until IsEmpty(ActiveCell.Offset(0, -2))

End Sub
4

4 に答える 4

3

Do UntilDo Whileと をWhile見てください。

本当にセルを反復したい場合は、先に進むことができます。しかし、ここで を使用するメソッドArraysは、セルをループするパフォーマンスの低下を確実に減らします...

Option Explicit

Sub AddToRigh()
Dim i As Integer
Dim vArr As Variant
Dim LastRow As Long

'--assume you are working on Sheet 1
LastRow = Sheets(1).Cells(Rows.Count, Range("A1").Column).End(xlUp).Row
ReDim vArr(1 To LastRow)

For i = LBound(vArr) To UBound(vArr)
    vArr(i) = "=Sum(RC[-2]:RC[-1])"
Next i

'--output this entire array with formulas into column C
Sheets(1).Range("C1").Resize(UBound(vArr)) = Application.Transpose(vArr)

End Sub

出力:

ここに画像の説明を入力

于 2013-01-22T06:35:05.207 に答える
3

Until 条件を次の文字列に置き換えるだけです。

Loop Until IsEmpty(ActiveCell.Offset(1, -2))

これにより、右側のセルが空であるかどうかがチェックされます。コードの残りの部分はそのままにしておく必要があります。

于 2013-01-22T06:21:01.143 に答える
2

私は決してvbaの専門家ではありませんが、これを行うことができます:

Sub macro()


    Dim R As Long
    R = 1
    Do While Not IsEmpty(ActiveCell.Offset(0, -2))
        Cells(R, "C").Select
        R = R + 1
        ActiveCell.Formula = "=sum(" & ActiveCell.Offset(0, -2) & "," & 
        ActiveCell.Offset(0, -1)    & ")"
    Loop

End Sub
于 2013-01-22T06:11:55.717 に答える
1

アイデアを提供するために、少し異なる行動方針をお勧めしたいと思いました:):

Sub macro()

    Dim found As Range

    Set found = Range("A:A").Find("*", after:=Range("A1"), searchdirection:=xlPrevious)

    If Not found Is Nothing Then
        Range(Range("A1"), found).Offset(0, 2).FormulaR1C1 = "=RC[-2]+RC[-1]"
    End If

End Sub
于 2013-01-22T06:24:27.593 に答える