0

このコードをセルの合計に使用できるようにしようとしています。

Worksheets("Sheet2").Range("C3").Offset(i, j).Formula = "=Sum("
&Worksheets("Sheet1").Range("A3").Offset(2*i,j).Address & ":" &
Worksheets("Sheet1").Range("A7").Offset(2*i,j).Address & ")"

それは私に正しいセルを与え続けますが、間違ったシートからです。したがって、最初の反復では、Sheet2のセルC3でsum(A3:A7)を取得しますが、A3:A7はSheet1ではなくSheet2を参照したままです。

ありがとう!

4

2 に答える 2

2

数式でもシートの名前を指定する必要があります。次のように記述すれば、コードは機能します。

Worksheets("Sheet2").Range("C3").Offset(i, j).Formula = "=Sum(Sheet1!" & _
Worksheets("Sheet1").Range("A3").Offset(2 * i, j).Address & ":" & _
Worksheets("Sheet1").Range("A7").Offset(2 * i, j).Address & ")"
于 2013-03-09T18:54:24.197 に答える
1

このコードを試してください - のExternal:=Trueパラメーターを.Address使用して完全なアドレスを取得します。これにはワークブック名​​も含まれますが、Excel はこれを自動的に削除するため、Sheet1!A3 になります。また、複数セルの範囲を処理できるため、範囲A3:A7をソースとして使用したことにも注意して.Addressください。手動で処理する必要はありません。

Sheets("Sheet2").Range("C3").Offset(i, j).Formula = "=SUM(" & _
    Sheets("Sheet1").Range("A3:A7").Offset(2 * i, j).Address(External:=True) & ")"

などの参照をハードコーディングするA3と、長期的にはバグにつながる可能性があることに注意してください。ユーザー (またはある段階で開発者でさえも) がシート構造を変更する可能性があるからです。名前付き範囲を使用することをお勧めします。つまり、参照するセル/範囲ごとに名前付き範囲を作成し、VBA でSheetX.Range("rngStartCell")または同様の方法でアクセスします。

于 2013-03-09T21:22:16.553 に答える