質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

3198閲覧

エクセルで選択したセル範囲の合計値をセル上に表示するVBAが知りたいです

NatsukiA

総合スコア16

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

1クリップ

投稿2019/03/03 08:47

編集2019/03/03 10:18

前提・実現したいこと

今日からVBAというかプログラミング言語を触った初心者です。
エクセルで選択したセル範囲の合計値をセル上に表示したいです。

イメージ説明
例えば、赤い線の範囲を選択した時に、「項目2」の平均をE7に算出たいと考えています。
他の項目も同様にしたいです(項目8はE8に表示する)。
つまり、選択範囲の右側の列に各平均値を出したいと思っています。

発生している問題・エラーメッセージ

VBAを実行すると以下のメッセージがでます
『実行時エラー’1004’
‘Rangeメソッド失敗しました’¥_Global’オブジェクト』

該当のソースコード

VBA

1Sub 合計SUM() 2 Dim 選択セル As Range 3 For Each 選択セル In Selection 4 WorksheetFunction.Sum (Range(選択セル)) 5 Next 選択セル 6End Sub 7

補足情報(FW/ツールのバージョンなど)

エクセル2016で行っています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

まずは、エラーの原因について。
Selectionの各要素は1セル毎のRangeオブジェクトですので、For Eachループでの選択セル変数の内容は、B7,C7,D7,B8...のセルとなります。そのため、Range(選択セル)としてしまうと、Range(70)などとしていることになり、エラーになります。

また、1セル単位でのループですから、SumとかAverageとかの意味がないですし、さらにその結果を使っていないので、ただ計算をしているだけになっています。この辺はすでについている回答にあるとおりです。

さて、質問文を正とすると、「セルを選択したら選択範囲各行の右隣のセルに行毎の平均を出力したい」と理解しましたが、そうではないだろうと思いつつ、そのままコードにするとこんな感じでしょうか。

VBA

1Private Sub Worksheet_SelectionChange(ByVal Target As Range) 2 '選択範囲を行毎にループ 3 For Each r In Target.Rows 4 '選択範囲の右側のセルに合計値を入れる 5 r.Cells(1, 1 + r.Cells.Count).Value = WorksheetFunction.Average(r) 6 Next 7End Sub 8```※イベントプロシージャということで引数の`Target`を使ってループさせていますが、`Selection`としても同じです。 9 10もし、これが本当にやりたいことだとすると、ざっと思いつくだけでも下記の動作の条件を考えなければいけないです。 11* 行全体を選択した場合 12* 出力先のセルが空でない場合 13* 入力や移動のために選択した場合

投稿2019/03/03 15:51

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NatsukiA

2019/03/04 13:37

ありがとうございました。仰るように本当にやるたいこととは違いますが、Worksheet_SelectionChange(ByVal Target As Range)だとTarget=Selectionになること(そうでない場合もあるかもしれませんが…)、エラーについてご教授いただいたことが非常に勉強になりました。 もう少し勉強して条件を考えたいと思います。
guest

0

VBA

1Sub test() 2 Cells(1, 1) = Application.WorksheetFunction.Sum(Application.ActiveWindow.RangeSelection) 3End Sub 4コード

A1に合計を表示します。

この程度なら 『VBA 選択したセルの合計』とでも、検索した方がここで聞くより早いと思うし、どんピシャリのなくとも、応用が利くようになって、自分自身のためになると思います。

投稿2019/03/03 10:04

aki.aki.

総合スコア58

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NatsukiA

2019/03/03 10:23

ご回答ありがとうございます。勉強不足で申し訳ありません…頑張ります。
guest

0

これで、イミディエイトウィンドウに合計値が出力されます。

VBA

1Sub 合計SUM() 2 Dim 選択セル As Range 3 Dim lGoukei As Long 4 lGoukei = 0 5 '選択したセルを一つずつピックアップし、足し上げる 6 For Each 選択セル In Selection 7 lGoukei = lGoukei + 選択セル.Value 8 Next 選択セル 9 Debug.Print lGoukei 10End Sub

投稿2019/03/03 09:49

TanakaHiroaki

総合スコア1063

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NatsukiA

2019/03/03 10:22

ご回答ありがとうございます。とても嬉しいです。 私の説明不足だったと思うので質問文を修正しました。お時間に余裕があればみていただけると幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問