- ベストアンサー
対象の年月の数値を選び出して合計したい
下記のようなセルがあるとします。 A1から縦に年月日、B1から縦に数値が入ってます。 A B C 2003年1月12日 19278 2003年1月13日 23343 2003年1月14日 12222 2003年1月16日 34632 2003年1月18日 33335 : : 2008年6月10日 98756 2008年6月11日 59478 2008年6月12日 14218 : : 上記より、例えば2007年8月の合計をC1に求めたいとき、C1に入れる関数式が判りません。 力技で、sum(A●●:A○○)の様に、●●に月始め、○○に月の終わりのセル値を書けば出来るのは判りますが、全ての月毎に合計を求めたいので大変な作業になります。 実際には16年分やらないといけないので。。(汗 出来れば応用として、年毎の合計も出したいです。 ご教授よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
#2のmerlionXXです。 > 何故か#VALUE!と表示されてしまいます。 セルの書式設定とは関係ないでしょう。 データ範囲内のA列かB列に文字列が入っているのではないでしょうか? =COUNT(A:A) A列の数値セル合計 =COUNTA(A:A) A列の空白以外のセル合計 この値が違っていれば文字列があります。B列も同様に調べてみてください。
その他の回答 (5)
- maron--5
- ベストアンサー率36% (321/877)
C1=SUMPRODUCT((TEXT(A1:A10,"yyyymm")="200708")*B1:B10)
- mu2011
- ベストアンサー率38% (1910/4994)
一例です。 A列はシリアル値としています。 月の集計は、=SUMPRODUCT((TEXT(A1:A100,"yyyy/mm")="2007/08")*(B1:B100)) 年の集計は、=SUMPRODUCT((TEXT(A1:A100,"yyyy")="2007")*(B1:B100))
お礼
B列に空白のセルがあり、そこに0を入れたら計算できました。 ありがとうございました。
補足
A列はシリアル値としています、との事ですが、セルの書式設定を仮に「数値」とかに変更すると36558のような数字になる状態で、実際には「日付」を選んでる状態なのですが、これでOKなのでしょうか? #VALUE!が出てしまいます。。
- grumpy_the_dwarf
- ベストアンサー率48% (1628/3337)
A列が日付で並んでいるとして、月の変わり目でC列に小計が出る式 C2: =if(month(A2)<>month(A3),sum(B$1:B2)-sum(C$1:C1),"") 下にガ~ッとドラッグね。年ごとの集計も応用は簡単。month関数が year関数になるだけ。
補足
すばらしいアイデアありがとうございました。 式を見るとなるほど~って感じ何ですが、計算結果が出てくれません。。 やっぱり日付データがシリアル値?なのが原因でしょうか。。
- merlionXX
- ベストアンサー率48% (1930/4007)
仮にデータの範囲が1~10000行だとしたら 2008年8月の合計 =SUMPRODUCT((YEAR(A1:A10000)=2008)*(MONTH(A1:A10000)=8)*B1:B10000) 2008年の合計 =SUMPRODUCT((YEAR(A1:A10000)=2008)*B1:B10000)
補足
なるほど!っと思って早速実行してみました。 が、、何故か#VALUE!と表示されてしまいます。 日付のA列には2008/01/01の様に入力していて、実際の表示は2008年1月1日となるようにセルの書式設定で「日付」を選んでます。 何かこのあたりが原因でしょうか?
- kigoshi
- ベストアンサー率46% (120/260)
「集計」で行うのはいかがですか。 ◎手順 1)タイトル行を付けます。1行目に空白行を挿入して A1=「日付」 B1=「数値」 C1=「年月」 2)年月を入れる。C2=Year(A2) & "年" & Month(A2) & "月" C2セルを下までコピー。 3)A1セルにカーソルを合わせ、 [データ]→[集計]→ グループの基準:年月、集計の方法:合計、集計するフィールド:数値のみチェック 現在の集計と置き換える:チェックなし グループごとに改ページを挿入する:チェックなし 集計行をデータの下に挿入する:チェックなし [OK]をクリック。 年ごとの集計はD列を「年」の列にして D2=Year(A2) & "年"として 以下同様の感じでできると思います。 どうしても関数でやりたいのであれば、たぶんVBAで関数を定義しなければならないと 思います。その方法を採りたいのであれば、その旨、補足して下さい。
お礼
早速の回答ありがとうございました。 VBAは苦手ですがなんとか関数だけでできないものでしょうか。。 もう少しやってみて、ダメなら集計でやってみようと思います。 ありがとうございました!
お礼
ご指摘通りでした。B列に空白があり、そこに0を入れることで計算できました。 ありがとうございました!!