• ベストアンサー

【VBA】絶対セル参照の記述

早速質問させていただきます。 ActiveCell.FormulaR1C1 = "=SUM(R2C:R[-1]C)"のように記述すると、=sum(A$2:(関数を記入する1つ上))のように、左側部分が行固定になってしまいます。行固定をしないで記述する方法はありますか?sum関数を入れるセルからの相対参照は、データの総数が都度変化しますのでできません。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 例えば、 数値の最後尾を探す関数 1行目にSUM関数を置く場合の相対参照式 A1方式 =SUM(OFFSET(A2,,,MATCH(10^16,A2:A100,1))) これは、相対参照式ですから、A列に書けば、上記のようになりますが、B列に書けば、 =SUM(OFFSET(B2,,,MATCH(10^16,B2:B100,1))) のようになります。 R1C1方式 =SUM(OFFSET(R[1]C,,,MATCH(10^16,R[1]C:R[99]C,1))) 式を貼り付けたときは、同じようになります。 式入力したいのでしたら、めったにしないことですが、以下のような使い方になります。 下に向かって最終行を探す場合。 Sub TestFormual() Dim myRow As Long myRow = Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row  ActiveCell.FormulaR1C1 = "=SUM(R[1]C:R" & myRow & "C)" End Sub 数式は数式を置くたびに、Calculate が働きますから、そのままですと、非常に重くなってしまいます。VBAは、あくまでも、VBAらしくするなら、以下のようにします。 ただし、裏技としては、Evaluateを使うことがあります。 Sub testSum() Dim i As Long, j As Integer, sum As Double With ActiveSheet   For j = 1 To .UsedRange.Columns.Count    For i = 1 To .Cells(65536, j).End(xlUp).Row      sum = sum + .Cells(i, j).Value    Next i    .Cells(i, j).Value = sum    sum = 0   Next j End With End Sub

gucci1
質問者

お礼

どうもありがとうございました。お手数をおかけしました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.3

#2のmshr1962です。 >sumの開始セルをA1形式で行固定にせず、終わりのセルを相対参照にしたいということです 特定の行から最終行なら下記に設定が載ってます。 http://www.voicechatjapan.com/excelvba/VBArei10.htm 例A列のA1から最終行の和の数式をセットする Dim myRow As Long myRow=Range("A1").End(xlDown).Row ActiveCell.Value = "=SUM(A1:A" & myRow & ")"

全文を見る
すると、全ての回答が全文表示されます。
  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.2

R2Cだから固定なのでR[2]Cにすれば固定ではなくなります。 R1C1形式の場合(現在位置がA1として) 絶対参照(列行) R1C1=$A$1 絶対参照(列) R[0]C1=$A1 絶対参照(行) R1C[0]=A$1 相対参照 R[0]C[0]=A1 ※上記の[0]は省略可 ただし、"=SUM(R[2]C:R[-1]C)"は循環参照になります。 直上の2つのセルなら、"=SUM(R[-2]C:R[-1]C)"ですね。

全文を見る
すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 >行固定をしないで記述する方法はありますか? R1C1方式とA1方式との違いが分っていないようですね。 一体、どのように式を入れようとしているのでしょうか?  ActiveCell.FormulaLocal ="= (A1方式の式)" でも使ってみたらいかがですか? それから、ある程度、VBAが分ってくると、VBAで式を入力するようなことはしませんね。最初から、範囲が変わる式を入れれば済むことですから。

gucci1
質問者

補足

どうもありがとうございます。 >それから、ある程度、VBAが分ってくると、VBAで式を >入力するようなことはしませんね。最初から、範囲が >変わる式を入れれば済むことですから とはどういう意味でしょうか。 やりたいのは、sumの開始セルをA1形式で行固定にせず、終わりのセルを相対参照にしたいということです。 そういうことは可能なんでしょうか。みなさんの回答を拝見させていただくと、データの個数が変わってしまう場合にはできないように思えますが。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excel VBAで表組みしたらデバック発生

    Excel VBAの初心者です。Windows Vistaで Excel2007を使っています。 表をマクロの実行で作成したいと思っています。 何もないエクセルブックより 「開発」→「マクロの記録」→「相対参照」 →「表の作成」→「記録終了」→「相対参照で記録の解除」 →「エクセルマクロ有効ブックで保存」 ところがこのマクロ記録が入ったブックを再度立ち上げ、 表をオールクリアにし、マクロボタンより表作成を実行 させようとすると、次のエラーメッセージがでました。 『実行時エラー'9' インデックスが有効範囲にありません。』 デバックからModule1をみると以下の記述となっていました。 Sub 表組み() ' ' 表組み Macro ' ' ActiveCell.Range("A1:E5").Select Selection.Copy Windows("Book1").Activate ActiveSheet.Paste ActiveCell.Columns("A:A").EntireColumn.Select ActiveCell.Rows("1:1").EntireRow.RowHeight = 11.25 ActiveCell.Rows("1:5").EntireRow.Select Selection.RowHeight = 21.75 ActiveCell.Columns("A:A").EntireColumn.ColumnWidth = 14.88 ActiveCell.Offset(0, 4).Range("A1").Select Application.CutCopyMode = False With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With ActiveCell.Offset(1, -3).Range("A1:D4").Select Selection.NumberFormatLocal = "#,##0_ " ActiveCell.Select ActiveCell.FormulaR1C1 = "78000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "102000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "9800" ActiveCell.Offset(-2, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "65000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "204000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "500" ActiveCell.Offset(-2, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "86000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "151000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "10200" ActiveCell.Offset(-2, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(0, -3).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(-4, -2).Range("A1:D1").Select Selection.AutoFilter End Sub 上から9行目(?)のWindows("Book1").Activateに 黄色い矢印が示され、また行全体が黄色く四角に 覆われていました。 おそらくこの記述に問題があると思いますが、 どんな記述に変えたらいいのか分かりません。 Excel VBAにお詳しい方ご教示願います。 なお、マクロで作成したい図を添付いたします。 参考にしていただければ幸いです。

  • VBA セルにSUM関数を相対参照で埋め込む時に変数を使用したい

    VBAを使用して、セルに相対参照でSUM関数を仕込もうと考えています。 Cells(goukei_start_row, 10) = "=SUM(R11C10:R" & goukei_start_row - 1 & "C" & 10 & ")" 上記でやると、絶対参照で =SUM($J$11:$J$43) となってしまうのですが、 $を付けず=SUM(J11:J43)のような形にするにはどうすればよいのでしょうか?

  • エクセル マクロ VBA について

    以下はセルB2.C2.D2.E2.F2をアクティブセルから右方向へ入力しています。ここでの入力とは"=" + "セルB2" というものです。一つずつ入力している為マクロが長くなります。短くシンプルなものにしたいです。ご教示お願いします。 ActiveCell.FormulaR1C1 = "=R2C2" ActiveCell.Offset(0, 1).Select ActiveCell.FormulaR1C1 = "=R2C3" ActiveCell.Offset(0, 1).Select ActiveCell.FormulaR1C1 = "=R2C4" ActiveCell.Offset(0, 1).Select ActiveCell.FormulaR1C1 = "=R2C5" ActiveCell.Offset(0, 1).Select ActiveCell.FormulaR1C1 = "=R2C6"

  • エクセル関数のセル参照方法

    エクセル関数のセル参照で、あるセルに入力した数値を、参照するセルの行番号として使いたいのですがどうしたらよいのでしょうか? VBAではそのような方法があったと思うのですが、関数で処理する方法はあるのでしょうか? たとえば、 =SUM(C5:C*) のような関数で「*」を他のセルに入力して参照させることは可能でしょうか? よろしくお願いいたします。

  • セルを参照させる関数について

    C列には関数で返ってきている値が入っています。(たとえば単純にC1のセルには=SUM(A1:B1)と入っている)そのままC1を横にドラッグしてコピーするとD1のセルには単純に=SUM(B1:C1)となりますが、見に行くセルをC2に、E1のセルの参照するセルはC3を。。。という風に参照させるにはどんな関数を使用すればいいのでしょうか? (単純にD1のセルに=C2と設定はしたくないのが前提です)

  • Excel VBAの相対参照について

    Excelで相対参照を勉強しようと思い、 A3を選択後 1.A3:F3を選択 2.A3:F3に黄色の網かけを設定 3.A5を選択 を相対参照で記録しました。(記録は1.~3.までです) VBAを確認すると Sub 罫線() ActiveCell.Range("A1:F1").Select With Selection.Interior .ColorIndex = 6 .Pattern = xlSolid End With ActiveCell.Offset(2, 0).Range("A1").Select End Sub という記述があったのですが、 なぜ、ActiveCell.Range("A1:F1").Selectと ActiveCell.Offset(2, 0).Range("A1").Selectというものがあるのでしょうか。 僕は、A1:F1の選択はしていませんし、網掛け後はA5を選択しているのに Range("A1").Selectの記述もよくわかりません。 ActiveCell.Offset(2, 0).Range("A1").Selectというのは 「選択したA1のセルから2行下、0列めを選択」と読めそうですが、 相対参照ならではの記述があるのでしょう。 ご存知の方、教え下さい。

  • ActiveCell.Formulaについて

    Visual Basicのことでお尋ねします。 エクセルで出勤簿の任意のところに行挿入した後、日給欄の下の合計を再計算したいのですが、合計範囲の上が一つ下にずれてしまいます。 ActiveCell.FormulaR1C1="SUM(R[-7]C:R[-1]C)" というのはアクティブセルから7つ上から1つ上までの合計だと思うのですが、上の端をK4セルに固定したいのです。 または、上から(下から)何番目(行挿入するので変わります)という形でもいいのですが。 よろしくお願いします。 それと「ActiveCell.FormulaR1C1」みたいな言葉の用語辞典があれば教えて頂きたいのですが、よろしくお願いします。

  • ワークシート関数にVBAでセルを指定するには?

    FormulaR1C1ではなく Range形式でVBAでワークシート関数をセルにいれるコードを書くにはどうすればいいでしょう? Sub Macro() ActiveCell.FormulaR1C1 = "=LEN(RC[-1])" End Sub これを Sub Macro() ActiveCell.FormulaR1C1 = "=LEN(a1)" End Sub こうすると、 数式バーには、=LEN('a1')と入っており、 セルの値は#NAME? になります。 アポストロフィーが余計なのですがどうすれば取れますか?

  • セルの参照先を入力にて

    こんにちは。スイマセンが、お願いします。 シート名"データ"を参照先にしたいのです。 アクティブなワークシートのRange("C4")に、 "=データ!C2"と入力したいのです。 セルのC4,C9,C14,・・・に、 各々 =データ!C2,=データ!C3,=データ!C4,・・・としたいです。 どのようにしたらいいのでしょう? まずは、少ない数を試そうと思いまして、以下のようなものを試しました。 For i = 4 To 34 Step 5 Cells(i, 3).Select For j = 2 To 7 Step 1 ActiveCell.FormulaR1C1 = "=データ!C" & "j" Next Next これでは、当然、駄目です。 ActiveCell.FormulaR1C1 = "=データ!C" & j ActiveCell.FormulaR1C1 = "=データ!C" & CStr(j) これも、予想通り駄目でした。 どうぞ、お教えください。お願いします。

  • Excelの参照先セルに色を....

    Excelに関する質問です。あちこちのセルを参照しているsum関数があります。   例:=SUM(B4:B9,D7:D13,B16:E17,C20:D21,C23:C25)    このsum関数の参照先セルに、まとめて色を塗りたいのです。「どの領域の合計を出しているのか....」を一目で把握できるようなシートを印刷したいのです。 上手い方法はあるでしょうか? sum関数が入力されているセルを選択すると、参照先セルのワクが色づけされておぼろげに分かりますが、それでは認識性が今ひとつです。同様にsum関数が入力されているセルは複数個あり、それぞれの参照先を色分けしたいのです。 類似回答があるのかもしれませんが、下手な検索なため見あたりませんでした。すみませんが、以上、よろしくお願いいたします! 追伸:手動でチマチマ塗っていくのは断念しました。複数のsum関数がありますが、重複参照のセルはありません。1シート上です。

専門家に質問してみよう