- ベストアンサー
エクセルで期間内の数値を合計する関数
- エクセルで指定する期間内の数値を合計する関数について教えてください。
- 家計簿をエクセルで作成している際に、カード払いの集計で困っています。
- 具体的には、期間内に使用したカードの合計金額を別のセルに表示させたいです。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは! 色々方法はあるかと思いますが・・・ 一案です。 ↓の画像のような配置にしてみました。 A列は通常の日付でシリアル値・E列は各月の1日のシリアル値にして表示形式をユーザー定義から yyyy/m としています。 そして、各カードの各月の始まりから締日をI~K列のような表にしています。 F2セルに =SUMPRODUCT(($A$2:$A$1000>=DATE(YEAR($E2),MONTH($E2)-1,VLOOKUP(F$1,$I$2:$K$3,2,0)))*($A$2:$A$1000<=DATE(YEAR($E2),MONTH($E2),VLOOKUP(F$1,$I$2:$K$3,3,0)))*($B$2:$B$1000=F$1)*($C$2:$C$1000)) という数式を入れ、列方向と行方向にオートフィルでコピーすると 画像のような感じになります。 尚、元データの1000行目まで対応できる数式にしています。 尚、「0」が目障りであれば当方使用のExcel2003の場合は メニュー → ツール → オプション → 表示タブで「ゼロ値」のチェックを外せば 「0」は表示されなくなります。 あくまで一つの案ですので 他に良い方法があれば読み流してくださいね。m(__)m
その他の回答 (6)
- imogasi
- ベストアンサー率27% (4737/17069)
エクセルのバージョンを書いてない質問だが、エクセルを取り巻く情況のことを良く知らないようだ。2007からSUMIFSと言う関数が増えている。シートの操作も大幅に変わっている。 だから書かないといけない。 ーー 質問をあれこれ書いているが、結局 カード会社名、開始日、終了日の3条件の加算ではないのか。 カード会社名から開始日、締切日も割り出せないこともないかもしれないが、複雑に砂利過ぎるので 操作者が毎月入れる。 2007ではSUIFSで出来ると思う。 2003までは3条件(2条件も)をかける集計は、SUMPRODUCT関数を使うのが定石。 このコーナーにも沢山の質問があった。 Googleででも、SUMIFS、SUMPRODUCT関数で照会して、勉強してください。 エクセルの関数の普通の疑問は、Googleで勉強材料は揃います。
- kagakusuki
- ベストアンサー率51% (2610/5101)
今仮に、家計簿シートの名称が 家計簿シート で、そのA列に日付のデータ、 B列にカード等の使用目的、 C列に金額 が既に入力されていて、 Sheet2に月々の各カード使用料の集計結果を表示させるものとします。 まず、Sheet2の A1セルに カードの種類 B1セルに 〆日 D1セルに 2010年2月 と入力して下さい。 (D1セルに入力する値は、年と月のみの形式であれば、いつの年月であっても構いません) 次に、Sheet2のD2セルに入力した日付データを一旦削除してから、次の数式を入力して下さい。 =IF(ISNUMBER($C1),DATE(YEAR(C$1),MONTH(C$1)+1,1),"") 次に、Sheet2のD1セルをコピーして、Sheet2のE1~N1の範囲に貼り付けて下さい。 次に、Sheet2のC2セルに次の数式を入力して下さい。 =IF(OR($A2="",$B2="",ISNUMBER(C$1)=FALSE),"",SUMPRODUCT((OFFSET(家計簿シート!$A$1,,,MATCH(9^9,家計簿シート!$A:$A))>=IF($B2="末日",C$1,DATE(YEAR(C$1),MONTH(C$1)-1,$B2)+1))*(OFFSET(家計簿シート!$A$1,,,MATCH(9^9,家計簿シート!$A:$A))<=IF($B2="末日",DATE(YEAR(C$1),MONTH(C$1)+1,1)-1,C$1+B$2-1))*(OFFSET(家計簿シート!$B$1,,,MATCH(9^9,家計簿シート!$A:$A))=$A2)*OFFSET(家計簿シート!$C$1,,,MATCH(9^9,家計簿シート!$A:$A)))) 次に、Sheet2のC2セルをコピーして、Sheet2のD2~N2の範囲に貼り付けて下さい。 次に、Sheet2のC2~N2の範囲をコピーして、同じ列の3行目以下に、リストで管理するカードの枚数を、リストの行数が上回る様になるまで、複数行に渡って貼り付けて下さい。 ここまででフォーマットは完成です。 後は、Sheet2のA2セルから下方に向かって、カードの名称を入力して行って下さい。 次に、各カードの〆日を、Sheet2のB2セルから下方に向かって入力して行って下さい。 この時、例えば毎月14日が〆日の場合は、 14 とのみ入力して下さい。 又、〆日が月末のものに関しては、 末日 と入力して下さい。 最後に、Sheet2のC1セルに、集計を始める最初の月を、 2010年1月 という具合に、年と月を合わせた形式で入力して下さい。 すると、家計簿シートに入力されているデータを基に、月々の各カード使用料の集計結果が表示されます。(無論、家計簿シートに後から追加したデータも、自動的に集計されます)
- MackyNo1
- ベストアンサー率53% (1521/2850)
またまたミスです(今日は他にもケアレスミスが多く、自分でも不思議ですが、もしかすると厄日なのかもしれません)。 質問をよく見たら、カードごとに日付の〆日が違うのですね。 私の提示した数式は前月の11日から今月の10日までのBカードのパターンの数式を提示していましたので、Aカードの列は15から開始し14日で終わるように適宜数字を変更してください。
- MackyNo1
- ベストアンサー率53% (1521/2850)
No2の回答ですが、実際の添付画像と数式範囲が違っていました。 画像のデータは12行目まであるのに、提示した数式は10行目までしか集計できない式になっていましたので、セル範囲を指定する10の数字を適宜100などの実際のデータよりも少し大きめの数字に設定してください。
- MackyNo1
- ベストアンサー率53% (1521/2850)
日付が先月11日から今月10日までの範囲の日付のセルをカードごとに集計したいなら以下のような関数を利用します(添付画像のF2セル)。 =SUMPRODUCT(($A$2:$A$10<=DATE(YEAR($E2),MONTH($E2)-1,10))*($A$2:$A$10>=DATE(YEAR($E2),MONTH($E2)-2,11))*($B$2:$B$10=F$1)*$C$2:$C$10) ただし、金額の欄は「円」を付けずに数字で入力し(円の表示が必要なら表示形式で「0"円"」などと設定)、集計する項目の「年月」を表示するセルは「2010/11」のように入力し、セルの書式設定でユーザ定義にして「yyyy年m月」などと設定しておき下方向にオートフィルドラッグします(連続データが月単位で入力できないときは右クリックでオートフィルをしてください)。
- mu2011
- ベストアンサー率38% (1910/4994)
一例です。 仮にご例示の11月シートでデータ範囲がA1:C4、A列セルの表示形式は日付、C列セルの表示形式は数値(0円)とします。 Aカードの12月支払分は、以下のような数式になります。 ■エクセル2003以下 =SUMPURODUCT(($A$1:$A$4="10/15"*1)*($A$1:$A$4="11/14"*1)*($B$1:$B$4="Aカード")*($C$1:$C$4)) ■エクセル2007以上 =SUMIFS(C:C,A:A,">="&"10/15"*1,A:A,"<="&"11/14"*1,B:B,"Aカード") 因みに数式に日付等を固定にすると数式が長くなり汎用的ではないので別セルに設定した方が良い。 別シートにカード別決済表を1月から12月まで作った方が良いかもしれません。 =SUMPRODUCT(($A$1:$A$4>=$E$1)*($A$1:$A$4<=$E$2)*($B$1:$B$4=$E$3)*($C$1:$C$4))=SUMIFS(C:C,A:A,">="&$E$1,A:A,"<="&$E$2,B:B,$E$3)