- ベストアンサー
エクセルVBAでOFFSETを使った可変範囲のSUM関数を使いたい
- エクセルVBAのOFFSETを使った可変範囲のSUM関数について質問です。
- Cells(cnt, n - 5)には通っていますが、SUM関数の範囲を可変にする方法を知りたいです。
- OFFSETを使用した記述が定義されていないというエラーが表示されます。他の方法があれば教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
訂正です。 上側のコードですが、Addressが抜けておりました。 申し訳ありません。 またMeは不要です。Meはユーザーフォーム等で自身のフォームなどを対象にする場合に用います。 現在のワークシートを対象にするのであれば、Activesheet.Rangeとしてください。 Cells(cnt, n - 3) = WorksheetFunction.Sum( _ Range( _ "cr" & cnt & ":" & _ Range("cr" & cnt).Offset(Range("CR6") * -1, 1).Address _ ) _ ) またn及びcntの値は正しいですか?cntが3以下または nが3以下ですと、エクセルの取り扱えるセル範囲外となりますのでエラーとなります。 以下のテストコードで動作致します。 (合計対象範囲はCR1:CS4となり、結果はCQ4セルに出力されます) Sub sample1() Dim cnt As Long, n As Long cnt = 4 n = 98 Cells(cnt, n - 3) = WorksheetFunction.Sum( _ Range( _ "cr" & cnt & ":" & _ Range("cr" & cnt).Offset(Range("CR6") * -1, 1).Address _ ) _ ) End Sub Sub sample2() Dim cnt As Long, n As Long cnt = 4 n = 98 Cells(cnt, n - 3) = WorksheetFunction.Sum( _ Range( _ Cells(cnt, "cr"), _ Range("cr" & cnt).Offset(Range("CR6") * -1, 1) _ ) _ ) End Sub
その他の回答 (1)
- eden3616
- ベストアンサー率65% (267/405)
CR6セルの値をオフセットの行の移動量として利用したいということでしょうか? Cells(cnt, n - 3) = WorksheetFunction.Sum( _ Me.Range( _ "cr" & cnt & ":" & _ Range("cr" & cnt).Offset(Range("CR6") * -1, 1) _ ) _ ) Rangeはセル範囲のアドレスを「&」で文字列結合しなくても以下のように記述することが出来ます。 Cells(cnt, n - 3) = WorksheetFunction.Sum( _ Me.Range( _ Cells(cnt, "cr"), _ Range("cr" & cnt).Offset(Range("CR6") * -1, 1) _ ) _ ) ヘルプの以下の項目を参照してRange及びOffsetの使用方法について確認したほうがよいかと。 ■Worksheet.Range プロパティ 式.Range(Cell1, Cell2) ■Range.Offset プロパティ 式.Offset(RowOffset, ColumnOffset)
補足
ありがとうございます。でも 上で レンジメソッドの失敗 下で アプリケーション定義エラー でした。 個別の使い方はヘルプで分かるのですが、こうした、混合型に為ると、正式に習ってない我流が弱みに成ります。
お礼
たびたび 恐縮です 勉強させていただきました。ありがとうございます。感謝