アプリ版:「スタンプのみでお礼する」機能のリリースについて

A列にいくつかランダムに小計が入っておりB列の数値をA列の小計が入っている
行まで数式で足しています。
例=SUM(B16:B20)  
A列の最終行に総計が入っているのですが総計にはB列のいくつかの小計行を
足して総計を出したいです。

小計を出すにはこちらで教えて頂き、VBAで自動でいれることができたのですが
総計をいれることができません。
VBAではどのように組めばいいのでしょうか?

A 回答 (3件)

プログラムの質問をする時には余計な話しを色々前振りするより、何がしたいのか、どうやっているのか、端的に書いた方が良いです。


コードを書く時にも同じです、コンピュータに無駄な事をやらせないで、端的にコーディングした方が良いです。

このプログラムは、かなり面倒な書き方してますが、これをそのまま使って合計行を作るとなると…
小計の合計コードを、総計セルに入れたいのであれば、小計でやっている合計コードを全部継ぎ足してぶち込むのが簡単です。
> ' 合計コード格納用変数の宣言と初期化
>   Dim g As String
>   g= "=0.00"
> ' 小計コードが下記で正しいと仮定
>   Cells(i, 2).FormulaR1C1 = "=SUM(R[-1]C:R[" & k - i & "]C)"
> ' 小計コードと同様の文字列を合計用に加算
>   g= g & "+SUM(R[-1]C:R[" & k - i & "]C)"
> ' 全ての小計処理が終了したNext以降に合計コードを埋める
> ' (セル位置は仮に24とした)
>   Cells(24, 1).Value = "総計"
>   Cells(24, 2).FormulaR1C1 = g

因にこれ以降は余談ですが…
・i と k の型は Integer で十分です。
・for を 1 個飛ばしにする時には for i=3 to 20 step 2 で良いです。
・わざわざ値を formula で入れてますが計算をVBA側で行うなら value で値を突っ込んじゃった方がもっと簡単に書けます。
・同じ index を指し示すのに i と k で設定をわけるとバグの原因になるので起点と移動量を別途にした方が綺麗に書けます。
    • good
    • 0
この回答へのお礼

返信ありがとうございます。
SUM関数の代わりにsubtotalを使用したら
うまくいけました。
>・同じ index を指し示すのに i と k で設定をわけるとバグの原因になるので起点と移動量を別途に
>した方が綺麗に書けます

そうなんですね。。
勉強になりました!

お礼日時:2011/01/23 20:32

SUM関数ではなく、SUBTOTAL関数を使いましょう。



http://exinfo.biz/func/func_subtotal.shtml
    • good
    • 0
この回答へのお礼

SUBTOTAL関数を使用して実行できました!
ありがとございました!

お礼日時:2011/01/23 20:03

えーと説明が良く読み取れないのですが…


B列に入っている数値を幾つか足して総計をとりたい?ですか?

まず、SUM 関数は括弧内を全て足し算してくれます。
例えば = SUM(B5, B10, B20) と書くと B5+B10+B20 の結果です。
また、= SUM(B5,B6,B7,B8) と書く変わりに = SUM(B5:B8)とかけます。
これらの複合も可能で = SUM(B5:B8,B10,B20) などとも書けます。

あと、セルの中に = 付けて数式を書くだけの事は VBA とは余り言いません。
スクリプト用のシートにプログラムを書くコーディングをVBAと呼びます。
    • good
    • 0
この回答へのお礼

説明不足で申し訳ありません。
下記のコードに合計行を追加したい次第です。

Sub test1()
  Dim i As Long
  Dim k As Long 'SUM式の起点を記憶させるため

  k = 2 '起点初期値
  For i = 3 To 20 'A3からA20までLoop
    If Cells(i, 1).Value = "小計" Then
      Cells(i, 2).FormulaR1C1 = "=SUM(R[-1]C:R[" & k - i & "]C)"
      '1行スキップ
      i = i + 1
      '次の起点を記憶
      k = i
    End If
  Next
End Sub

お礼日時:2011/01/23 12:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!