• 締切済み

エクセルのマクロで選択範囲の合計を求めたい

A2:A10に数字があってその一つ下に合計をVBAで出したいのですがどうしたらよいでしょうか。 数字はA2:A50とかA2:A30とか毎回変わります、そしてその下に合計を出します。 マクロで記録したらその選択範囲まで記録されてしまうので 違う範囲が求められません。 とにかくある範囲のセルを選択してその選択範囲の一番下か、または選択範囲の一つ下に合計を出したいのです。 もしくはそのアクティブセル上にある数字の合計です。 どうぞご教示下さい。

  • RZ61
  • お礼率35% (5/14)

みんなの回答

回答No.8

No1の追伸です。 計算するシートがアクティブであれば、セルはどこがアクティブになっていてもマクロの実行には影響ありません。たとえ AZ10000 がアクティブでも。 計算するシートをアクティブにしたくない場合は、3行目で計算するシートを指定します。 sheet1 の場合は with worksheets("sheet1") となります。この場合シート2でマクロを実行してもシート1の合計ができます。

回答No.7

こんばんわ、No1です。 ごめんなさい、3行目の綴りを誤っていました。with activesheets ではなく with activesheet です。失礼しました。 sub TestSum() dim I as long, R as long with activesheet for I = 2 to .cells(10000,1).end(xlup).row R = R + .cells(I,1) next I .cells(I+1,1)=R end with end sub .cells(行,列) であるといいましたが、列についても for to ... next 文を平行して使用すれば、10行でも100行でも同じマクロで合計を求めることができます。 下から3行目の .cells(I+1,1) で1つ飛ばし .cells(I+2,1) で2つ飛ばしになります。

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

こんばんは。 >数式をコピーしたいので$を外して相対参照にしたいのですが それは簡単なことです。以下のようにすると相対参照になります。  .Address(0, 0) Sub Test2R() '範囲選択 Const N As Long = 2 '何個下? Const L As Long = 0 '何個左へ  With Selection   .Cells(.Count).Offset(N, L).FormulaLocal = "=SUM(" & .Address(0, 0) & ")"   .Value = .Value '定数化  End With End Sub >A5からとか範囲を変えるにはどうしたらいいでしょうか。 こちらの場合は、範囲の起点の部分は、絶対参照になります。 Sub Test1R() Const M As Long = 5 '最初は何行目? Const N As Long = 2 '何個下? Const L As Long = 1 '何個左へ  With ActiveSheet    With .Cells(Rows.Count, ActiveCell.Column).End(xlUp).Offset(N, L)       .FormulaLocal = "=SUM(R" & M & "C[-" & L & "]:R[-" & N & "]C[-" & L & "])"       '.Value = .Value '定数化    End With  End With End Sub

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.5

質問表現が十分でない。 (A)A1:A10とか言うのを(範囲を)どのようにしてプログラムに伝えるのですか。 (1)マウスで範囲指定 (2)InputBoxで範囲を問い合わせて、答えによる。INPUTBOXのTYPE:=8 (3)文字列で答える などどういう風に考えていますか (B)計算に入るキッカケはどう考えていますか イベントという言葉を知っていますか。 (1)ボタンを押すーワンステップ手間がかかる (2)マウスで範囲指定の都度 (3)(A)の(2)、(3)ならEnteryやOKの直後でしょうが。 こういう意識が無いようで、取り組むテーマとしては、ちょっと早すぎるのでは。 (A)(1)と(B)(2)のケースで表示だけなら、 Private Sub Worksheet_SelectionChange(ByVal Target As Range) a = Application.WorksheetFunction.Sum(Target) MsgBox a End Sub のように簡単になるが、いつもこのようになると、しつこいことを 認識し、どういうのが良いか考えてから、ではコードはどうする、ということを質問すべきです。 (A)の(2)は Sub test01() Dim a As Range Set a = Application.InputBox("範囲", Type:=8) s = Application.WorksheetFunction.Sum(a) MsgBox s End Sub モジュールの実行のような面倒なステップを経てよいなら Sub test01() Dim a As Range Set a = Application.InputBox("範囲", Type:=8) s = Application.WorksheetFunction.Sum(a) MsgBox s c = a.Cells(1).Column r = a.Cells(1).Row + a.Rows.Count Cells(r, c) = s End Sub など。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.4

ANo.2です。 >一つ下でなく二つ下に合計を出すにはどうしたらいいでしょうか。 Sub test2()     Dim r As Range     Set r = Selection r.Offset(r.Rows.Count + 1).Resize(1).Value = _   "計 " & WorksheetFunction.Sum(r) End Sub こちらではどうでしょうか?

RZ61
質問者

補足

おっとと少し書き方間違えたようです。 計は同じセルでなく左のセルに入れたいです。 例としてB1:B10の合計を計算して B10の二つ下のB12に合計を出してその隣であるA12に計を 表示するといったものです。 度々すみませんです。

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

こんばんは。 質問の内容にはブレがあるようです。 >A2:A10に数字があってその一つ下に合計をVBAで出したい >A2:A50とかA2:A30とか毎回変わります、そしてその下に合計を出します。 '[標準モジュール]が良いです。 アクティブセルの列の範囲の一番下の行の次の下のセルに出す。 数式でない場合は、.Value の コメントブロックを外す。 Sub Test1()  With ActiveSheet    With .Cells(Rows.Count, ActiveCell.Column).End(xlUp).Offset(1)       .FormulaLocal = "=SUM(R2C:R[-1]C)"       '.Value = .Value '定数化    End With  End With End Sub ワークシート関数を応用すればよいです。どこでも、同じ式です。 >ある範囲のセルを選択してその選択範囲の一番下か、または選択範囲の一つ下に合計を出したいのです。 Sub Test2() '範囲選択  With Selection   .Cells(.Count).Offset(1).FormulaLocal = "=SUM(" & .Address & ")"   ' .Value = .Value '定数化  End With End Sub

RZ61
質問者

補足

ありがとうございます、出来たようです。 ついでにお願いなのですが 選択範囲の次の下といいましたが二つ下には出来ないでしょうか。  10 ←このように空白を挟んで合計を出したいです。  10      またSub Test1()では常にA2から範囲をとるようですが 計20  A5からとか範囲を変えるにはどうしたらいいでしょうか。 次にSub Test2()では選択を余分にとって計算したら空白を 挟んで合計を出せますが 数式が=SUM($A$4:$A$11)のように絶対参照になるようです 数式をコピーしたいので$を外して相対参照にしたいのですが どうすればいいでしょうか。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

>または選択範囲の一つ下に合計を出したいのです。 のサンプル。 Sub test()   Dim r As Range   Set r = Selection r.Offset(r.Rows.Count).Resize(1).Value = _     WorksheetFunction.Sum(r) End Sub ご参考になれば。

RZ61
質問者

補足

やってみたところ出来ました。 お手数かけるのですが、一つ下でなく二つ下に合計を出すにはどうしたらいいでしょうか。  5  5 計10 上記のように表から空白を挟んで合計を出したいのです。

回答No.1

sub TestSum() dim I as long, R as long with activesheets for I = 2 to .cells(10000,1).end(xlup).row R = R + .cells(I,1) next I .cells(I+1,1)=R end with end sub A列の10000行目から上に向けてデータのある最終行を探しています。 次に2行目から最終行まで変数Rに繰り返し値を代入させています。 cells(行,列)ですのでA列以外であれば列の数字を変更してください。

RZ61
質問者

補足

回答ありがとうございます。 A2:A10に数字を入れてA11を選択状態にしてマクロを実行したら 「オブジェクトが必要です」というエラーが出ます。 デバッグを開いたら For I = 2 To .Cells(10000, 1).End(xlUp).Row 上の行で止まっているみたいです。 どうすれば合計が出るでしょうか。

関連するQ&A

  • Excelで選択範囲の合計をマクロで

    Excel2003を使用しています。 ステータスバーに、選択範囲の合計、平均、データの個数などが 表示されますが、同じ機能をマクロを使って、 固定のセルに表示できないでしょうか? 例えば、任意のセルを選択すると、 A1に選択範囲の合計、A2に選択範囲の平均が自動で表示される というような機能です。 Excel2007では、同様の機能がステータスバーにあるようなのですが。 よろしくお願い申し上げます。

  • エクセルのマクロ 並んだ数字の幾つかを抜き出してその合計を計算させたいのですが・・

    エクセルのマクロ(VBA)について、教えてください。 セルのA1からA2・・・A1000までに「01,03,06,08,20,」のように5つの数字がカンマで区切られて入力されています。 1.この5つの数字をb.c.d.e.f.の1から1000のそれぞれのセルに配置するマクロ 2.この5つの数字の数字の合計をb1から1000のセルに表示させるマクロは難しいでしょうか? MID関数をひとつづつのセルに入れていたのですが、マクロでできれば効率が良いと思い手引書等で考えたのですがよく分からないのです。

  • エクセルマクロ

    キーボード操作では、→→→↓shiftキー押しながら→→↓↓の手順操作のマクロを作成したい (セル番地で指定したマクロでなく、開始時のアクティブセル(任意セル番地の基点)から右3下1の位置から右2、下2の範囲指定をしたい) 仮に例を示すと、アクティブセル(仮にアクティブセル番地B5だったとすると)からカーソル左へ3つ、下へ1つ移動(アクティブセルはE6)し、右に2、下に2(E6:F7)を範囲選択するマクロを作成したい。

  • マクロを使い選択範囲を次々と変えて並べ替えたい

    マクロ作成は 範囲選択 A4~G12 マクロ記録開始 並べ替え E列 降順 マクロ記録終了 でマクロを作成し 次に範囲選択 A14~G22でこのマクロを実行すると範囲選択が前と同じA4~G12が並べ替えられてしまいます。 マクロの中を見ると範囲選択 A4~G12が書かれてしまっています。 次のように、選択範囲を次々と変えて並べ替えるマクロを作りたいのですがお教え願います。 1. 範囲選択 A4~G12を選択 マクロ実行で選択範囲をE列の値で降順並べ替える 2. 範囲選択 A14~G22を選択 マクロ実行で選択範囲をE列の値で降順並べ替える 3. 範囲選択 A28~G32を選択 マクロ実行で選択範囲をE列の値で降順並べ替える

  • Excel VBA アクティブセルからある一定のセルまでの範囲選択

    Excel VBA アクティブセルからある一定のセルまでの範囲選択 Excel2003を使用しています。 アクティブセルからC列に『計』と入力されている行の1行上のD列までを選択状態にするマクロを作成しようとしています。 C列に『計』と入力されている行は下記のように複数あるので、アクティブセルの行以下に入力されている次のC列の『計』の1行上までとしたいのですが、どのようにコードを書いたらいいでしょうか? 例えば… A2セルをアクティブにしていてマクロを実行するとA2:D3が選択状態に A7セルをアクティブにしていてマクロを実行すると、A7:D9が選択状態になるように という具合です。 わかりづらくて申し訳ありませんが、よろしくお願いします。    A     B     C     D 1  日付    №   品名    金額 2  1/1     1    ○○○   1,000 3  1/2     2    ×××   1,500 4              計      2,500 5 6 7   1/1     5    ○×○   2,000 8   1/3     6    ××○   1,200 9   1/4     7    ×○○   2,500               計      5,700            :            :

  • エクセルマクロ オートSUM(合計)式の挿入

    データの最下行の下にエクセルのマクロで列の合計(オートSUM)を挿入したいです。 毎作業ごとに最下行が異なるので、「マクロの記録」では上手くいきません。 (毎回式の選択範囲を変えなければならなくなるため) ご教授頂きたく、よろしくお願いします。

  • マクロの記録で任意の文字を検索してそのセルから範囲を選択したいのですが

    マクロの記録で任意の文字を検索して、見つかったセルから範囲を選択して別なシートへ切り取りし、貼り付けたいですが何か方法はありますか?現在は検索をしたセル番号になってしまいます。 マクロはじめたばかりです。 検索→い→(A2:C5)選択&切り取り→sheet2貼り付け→検索(sheet2)→え→(A3:C4)選択&切り取り→sheet3貼り付け sheet1    →sheet2   →sheet3  ABC     ABC    ABC 1あかさ    1いきし   1えけせ 2いきし    2うくす   2おこそ 3うくす    3えけせ 4えけせ    4おこそ 5おこそ できれば検索で発見されたA2やA3を任意のアクティブセルにし、範囲はC列の一番下のセルを選択し切り取りたいのですができますでしょうか。

  • エクセルで特定のセル(範囲)を選択出来なくするには?

    エクセルで特定のセル上(範囲内)でクリックしても、そのセルを選択出来ない様に設定したいのですが、やり方がよくわかりません。 本でいろいろ調べてみましたが、「セルの保護」とは違うようです。 よくこの様にしてあるエクセルのソフトを見るのですが、そういう設定をしたいのです。 VBAマクロのプログラム上でそのように設定するのでしょうか? (マクロはある程度わかります) よろしければ御教示下さい。

  • エクセル マクロ 行 非表示

    マクロについてご教授お願い出来ないでしょうか。 マクロ初心者です。 エクセル アクティブセル(ex A120セルやA20セル)の行から1行目までを非表示にさせるマクロがわかりません。 アクティブセルから下の行を非表示にさせるマクロは下記URLにて紹介がありましたが・・ https://www.relief.jp/docs/excel-vba-hide-below-active-cell.html また、もし可能でしたら、アクティブセルからA2行目までの非表示、つまり 1行目は残すマクロが可能でしたら、合わせてご教授どうぞよろしくお願い致します。 

  • VBAで、選択範囲の合計を表示するマクロを作りたい

    あるセル範囲(例えばB1:G1)にそれぞれ数値が入力されていたとします。 入力ダイアログでその範囲を指定し、その範囲内の数値の合計値を表示するマクロを作りたいのですが、やり方が分かりません。 セル範囲を入力させるプログラムはこれで合っていますか? Sub セル範囲の合計() Dim 範囲 As Range 範囲 = appllication.InputBox(prompt:="セル範囲は?", Title:="セル範囲", Type:=8) End Sub ここからどのように変えればいいでしょうか?

専門家に質問してみよう