• ベストアンサー

エクセルで月毎の集計

エクセルで銀行口座の管理をしようとしています。 A列に日付、B列に出金、C列に入金、E列に残高があります。(基本的に通帳の並びと同じです。) で、月ごとの出金、入金の管理をしたいと考えております。 各列ともにどんどん下の行に出金/入金を入力していくつもりなので、A列のとある月だけの出金、入金を抽出合計できたらいいなぁと思っています。何かよい方法(数式?)をご教示頂きたくよろしくお願いします。

  • yunji
  • お礼率9% (99/1092)

質問者が選んだベストアンサー

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.12

NO6,11です。 失礼しました。 >=MATCH(DATE(YEAR(A2),MONTH(A2),0)+0.5,データ!A:A)+1 と  >=MATCH(DATE(YEAR(A),MONTH(A2),0)+0.5,A:A)  をいれます。 は >=MATCH(DATE(YEAR(A2),MONTH(A2),0)+0.5,データ!A:A)+1 仮に式1 >=MATCH(DATE(YEAR(A2),MONTH(A2)+1,0)+0.5,データ!A:A) 仮に式2 では如何でしょう。 =DATE(YEAR(A2),MONTH(A2)+1,0)+0.5 で今月の最終の日にちの12時が必要ですね。 仮にデータが 1 日付 2 4/10 3 4/20 4 5/1 5 5/10 6 6/10 ・・・となっていて A2が2009/5/1の場合は 式1は 4行目の4 式2は 5行目の 5 がでると思います。 ちなみにA2に4月の日付の場合は 式1はエラーになると思います。 2行目に仮のデータ 2000/1/1 とかデータの中で突拍子もない小さい日付を入れて置いてください。 ここまでうまく出来ましたら =SUM(INDEX(データ!B:B,式1のセル):INDEX(データ!B:B,式2のセル)) で試してください。 ここまでできたら式1と式2をコピィして組み入れれば、それらの式をいれているセルは不要です。 >シートが別にでるのでNo.6さんのやり方にはかなり興味があるのですが ですが、他の方の式も範囲を データ!と別シートを使えば別シートでも大丈夫ですよ。 ただ、今後データが多くなったり、式をコピィして沢山使用した場合に パソコンへの負担が少ないほう方法を紹介しています。 条件として、データが日付順に並んでいることが条件でそれを利用しています。 せっかくここまで来たので式を理解して応用してください。

yunji
質問者

お礼

お礼おそくなり、申し訳ありません、また、重なるコメントありがとうございます。 当初の目的は達成することができましたので、質問を締め切ることにします、ありがとうございました。

その他の回答 (11)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.11

No6です。 >=DATE(YEAR(A2),MONTH(A2),0)+0.5 のセルには、「#N/A」 >=DATE(YEAR(A2),MONTH(A2)+1,0)+0.5 のセルには、「#NAME?」 ちなみに新しいブックで A2セルに 2009/8/14 と日付を入れます。 B2セルに >=DATE(YEAR(A2),MONTH(A2),0)+0.5 と入れると2009/7/31 と表示 表示形式を 時刻で 2001/3/14 13:30 を選ぶと 2009/7/31 12:00 となります。 日付のシリアル値について、この辺りが理解できると大変便利ですよ。 YEAR(A2) はA2セルの年を出しますので 2009 MONTH(A2) は月を出しますので 8 DATE関数の日の部分は 1なら 1日ですが、0なので前月の最終日になります。 =DATE(YEAR(A2),MONTH(A2),0)は、2009年8月の1日前なので 2009年7月31日 その値に 0.5を加えるので 2009/7/31 の正午12:00になるはずです。 この値をMATCH関数でデータで、その月の最初の行と最後の行を指定することが出来るということです。

yunji
質問者

補足

シートが別にでるのでNo.6さんのやり方にはかなり興味があるのですが、いまだにうまくいきません。なのですみませんが、おしえてください。 >前月と今月の最終日の12時がでます。 ここまではうまくいきます。 >=MATCH(DATE(YEAR(A2),MONTH(A2),0)+0.5,データ!A:A)+1 と  >=MATCH(DATE(YEAR(A),MONTH(A2),0)+0.5,A:A)  をいれます。 上で、2行目のAはA2、さらに2行目のA:Aはデータ!A:Aの間違いと思い、修正したのですが、2行目の方の「最後にあるデータ行番号」がでません。 さらに、最後の式、 =SUM(INDEX(データ!B:B,MATCH(DATE(YEAR(A2),MONTH(A2),0)+0.5,データ!A:A)+1):INDEX(データ!B:B,MATCH(DATE(YEAR(A2),MONTH(A2)+1,0)+0.5,データ!A:A))) がどうしてもエラーがでます。 というか、そもそも最後の式には、「前月と今月の最終日の12時のセル」も「最初と最後の行のセル」も参照されていないようなのですが、必要なのでしょうか?

回答No.10

作業列なしでもよかったです G1セルに 4 と入力して =SUMIF($A$2:$A$6,">="&DATE(2009,G1,1),B$2:B$6) -SUMIF($A$2:$A$6,">="&DATE(2009,G1+1,1),B$2:B$6)

回答No.9

作業列を使っていいならF列に =A2-DAY(A2)+1 として表示形式を日付にすると見やすくなります SUMIFで集計すればSUMPRODUCT関数よりは軽いです 例 2009年4月の集計 =SUMIF($F$2:$F$100,"2009/4/1",B$2:B$100)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.8

No.5・7です ごめんなさい! 画像が上手くアップできませんでしたので もう一度トライしてみます。 何度も失礼しました。m(__)m

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.7

こんにちは! No.5です。 肝心のセルが「0」になってしまいましたか? 考えられる原因としては、 EOMONTH関数の関係で メニュー → ツール → アドイン → 「分析ツール」にチェックが入っていないと 「0」となる可能性があります。 他に考えられる問題としては、 DSUM関数は検索範囲や検索条件に「タイトル行」(見出し行)も必要ですので タイトル項目が一致しないと正確な集計は出来ません。 ん~~~~ 考えられる原因としてはパッ!と思いつくといえばこの程度です。 尚、前回の回答の補足になりますが、 もう一度画像をアップさせてもらって ↓の表の作業列 I2セルに =IF(G1="","",">="&DATE(2009,G1,1)) J2セルに =IF(G1="","","<="&EOMONTH(DATE(2009,G1,1),0)) G3セルに =IF(G1="","",DSUM(A1:E9,2,I1:J2)) H3セルに =IF(G1="","",DSUM(A1:E9,3,I1:J2)) としてみました。 結局前回の回答とあまり変化はありませんが、 作業列を簡素化してみました。 以上、お役に立てれば幸いです。m(__)m

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.6

SUMPRODUCT関数や配列関数で集計しても良いのですが、多用するとパソコンの負担になります。 >各列ともにどんどん下の行に出金/入金を入力していくつもりなので、 つまりデータが日付順に上から並んでいくのであれば、以下参考にしてください 集計シート 年月 出金 入金 09/1 09/2 ・・・ 年月は、2009/1/1 とか日付を入れて、表示形式 ユーザー定義で yy年mm月 とかして年月の表示にしておきます。 説明のために、空いている列に  =DATE(YEAR(A2),MONTH(A2),0)+0.5 と =DATE(YEAR(A2),MONTH(A2)+1,0)+0.5 入れて下へコピィしてください。 前月と今月の最終日の12時がでます。 日々のデータがデータというシート名、A列に日付をいれているとして =MATCH(DATE(YEAR(A2),MONTH(A2),0)+0.5,データ!A:A)+1 と =MATCH(DATE(YEAR(A),MONTH(A2),0)+0.5,A:A) にするとデータで集計したい月の最初にある日付の行番号と最後にあるデータ行番号がでます。 この値を利用して合計する範囲を指定します。 =SUM(INDEX(データ!B:B,MATCH(DATE(YEAR(A2),MONTH(A2),0)+0.5,データ!A:A)+1):INDEX(データ!データ!B:B,MATCH(DATE(YEAR(A2),MONTH(A2)+1,0)+0.5,データ!A:A))) 式は長くなりますが、データが増えても、式を下へコピィしてもパソコンへの負担は変わりません。 INDEX関数ですが、INDEX(合計したい列を指定,合計したい最初の行番号指定):INDEX(合計したい列を指定,合計したい最後の行番号指定) といったように範囲を指定するのに使えます。

yunji
質問者

補足

ありがとうございます。 ご教示どおり、エクセルを実施してみましたが、 =DATE(YEAR(A2),MONTH(A2),0)+0.5 のセルには、「#N/A」 =DATE(YEAR(A2),MONTH(A2)+1,0)+0.5 のセルには、「#NAME?」 の表示になってしまいました。 大変お手数おかけしますが、原因等推測できないでしょうか?

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.5

こんばんは! 参考になるかどうか分かりませんが・・・ ↓の画像のように作業列を使用して G1セルに月の数値を入力するだけで、出金・入金の月集計が出来るようにしています。 DSUM関数を使っていますので、 I・J列を参照するようにしています。 (I・J列が目障りであれば、非表示にしてみてください) まずI2セルに =IF(G1="","",DATE(2009,G1,1)) J2セルに =IF(G1="","",EOMONTH(DATE(2009,G1,1),0)) (データの日付は今年を前提にしています) I4セルに =">="&I2 J4セルに ="<="&J2 という数式をそれぞれ入れています。 そして出金合計のG3セルに =IF(G1="","",DSUM($A$1:$E$100,2,I3:J4)) 入金合計のH3セルに =IF(G1="","",DSUM($A$1:$E$100,3,I3:J4)) という数式が入っています。 尚、元データは100行目まで対応できるようにしていますが、 データ量が多い場合は範囲指定の領域をアレンジしてみてください。 そして、EOMONTH関数を使っていますので メニュー → データ → アドイン → 「分析ツール」にチェックを入れておいてください。 これでG1セルに 月の数値を入力するだけでその月の出入金の集計が表示されるはずです。 当方使用のExcel2003での回答でした。 以上、参考になれば幸いですが、 他に良い方法があれば軽く読み流してくださいね。m(__)m

yunji
質問者

補足

詳しい説明ありがとうございます。 図とまったく同じブックを作ってみたのですが、肝心のG3、H3が“0”になったままです。 他のところは全く同じ数値がでているのですが・・・。当方のエクセルも2003ですが、私の間違いだとしたら、どのようなことが考えられるのでしょうか?

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

>A列のとある月だけの 合計したい月を指定してくれるのですね例えば、F1セルとかに。 それならありがたい。 例データA-D列 日付 出金 入金 残高 2009/6/30 320000 2009/7/23 10000 310000 2009/7/30 5000 305000 2009/8/5 100000 405000 2009/8/8 20000 385000 2009/8/11 10000 375000 2009/8/13 6000 369000 D1に2009、E1に8 (年と月数字) F1に出金合計 =SUMPRODUCT((YEAR(A3:A100)=2009)*(MONTH(A3:A100)=8)*(B3:B100)) 2007ならSUMIFSを使ってください。 だから、エクセルのバージョンを質問に書くこと。 ーー これではダメなのだろうな。自動で月が変わると出金合計欄に金額が現れるとかを希望なのかな。

yunji
質問者

補足

ありがとうございます。 よくわからない点をさらに質問させてください、F1に算出される合計は、E1に入力した値と関連してるようには思えないのですが。 つまりはF1の数式に、E1がはいっていないので。 ですが、やってみるとたしかに8月だけの合計が算出されました、なぜ???でも、E1に7を入力しても7月の合計ではありませんでした。 すみませんが、お時間ありましたら、補足お願いします。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

F2セルから下方には求めたい月を表示させるのですが、例えば4月の月を求めたいのでしたら4/1と入力して数式バー上では2009/4/1のようにします。そのうえでF列を選択して右クリックし、「セルの書式設定」から「表示形式」の「ユーザー設定」で m"月" と入力します。これで4月と表示されるようになります。 G1セルには出金、H1セルには入金と入力します。 G2セルには次の式を入力したのちにH2セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF($F2="","",SUMPRODUCT((YEAR($A$2:$A$100)=YEAR($F2))*(MONTH($A$2:$A$100)=MONTH($F2))*(B$2:B$100))) これでF2セルに4/1と入力すればF2セルには4月と表示され、出金および入金額がG2とH2セルに表示されます。 F3セルに5/1と入力すれば5月と表示され出金額および入金額がG3およびH3セルに表示されます。

yunji
質問者

補足

試してみました。たしかに、私のやりたいことができておりました。 他にも回答して頂いているので、一端ためしてみて、どれにするか決めたいと思います。本当にありがとうございました。

  • Cupper
  • ベストアンサー率32% (2123/6444)
回答No.2

面倒なんでピボットテーブルを使うことをお奨めします  Excel豆知識 ピボットテーブル  http://www11.plala.or.jp/koma_Excel/pivot_menu.html 参考にしてください

yunji
質問者

補足

参考URLを拝見しました。 下にも書きましたが、便利そうではあるんですが、できればリアルタイムにあるセルに表示できれば、と思っています。 お手数でなければ、計算式をお教え願えませんでしょうか?

関連するQ&A

  • エクセルの数式を教えてください。

    エクセルの数式を教えてください。 銀行の通帳をイメージしてください。 A列に日付、B列に残高が記録されています。 この状態で、月末毎の残高を抽出する数式を教えてほしいのです。 つまり 2010年7月なら7/31の時点での残高、2010年8月なら8/31の時点での残高を知りたいのです。 何卒、よろしくお願いします。

  • エクセルで金銭出納帳の入金累計をする時

    1  A     B     C      D     E 2  日付  科目   入金    出金   残高 ・ ・       (この間行数定めず) ・ X      合計  入金累計  出金累計 1~Xの間に、随時、行を挿入していきます。 行が定まっていれば、入金累計は=SUM(C3:Cx)ですが、 行が挿入されXが変化していく時の累計の数式を教えてください。 よろしくお願いいたします

  • エクセルの出納帳の残高表示

      A   B    C  入金 出金 残高 1 2 3 レイアウトはこんな感じです。 C2に残高を出すとしたら数式は「=C1+A2-B2」にして、C3以降の残高は相対参照で出してます。 これを、入金や出金の列に数字を入力すると自動的に残高が計算されてそれが残高の列に表示されるように設定することが可能の様ですが、どうしてもその方法がわからないのです。ぜひ教えてください!!

  • エクセルで数式を教えてください。

    エクセルで数式を教えてください。 通帳で考えると分かりやすいです。 A列には入った金額、B列には出て行った金額、C列には差し引き残高です。 データは100行目まで使います。 C列に入れる数式を教えていただきたいです。 また、残高がマイナスのときは、赤文字になると嬉しいです。 いや、-でも嬉しいです。

  • エクセルで月次集計

    いつもお世話になります。 一生懸命検索をしたのですが、よくわからなかったので質問させてください。 エクセルで簡単な現金出納帳があります。 A列は上から○月○日と日ごとに入力し、B列に入金、C列に出金を入力していきます。表そのものは1年間を単純に入れていきます。 別シートに各月ごとの入金・出金合計を関数で集計したいのですが、SUMIFを使っても条件の設定がわかりません。 実際の入力は4/10と入力しています。セルの表示は4月10日と表示され上の窓?には2006/4/10と表示されています。 初歩的な質問だと思いますが、助けてください。御願い致します。

  • アクセス関数(残高表示)

    アクセスの関数(残高計算)について教えてください。 金銭管理表を作成し、残高を表示したいのですが、個別に集計してしまうと上手く残高が表示されません。  最初にテーブルにてID(オートナンバー)、氏名(Aさん)、月日、適用、入金額、出金額、 2行目にBさん、3行目にAさん、4行目にAさん、5行目にBさん、6行目にBさん、 7行目にCさん・・・・・ とデーターを入力しました。そしてクエリにてテーブルを利用して残高を計算しました。 クエリのフィールドは新たに残高(計算式を入力)を作ったので、ID(オートナンバー)、氏名、月日、適用、入金額、出勤額、残高: CCur((NZ([入金額])+NZ(DSum("入金額","テーブル","ID<" & [ID])))-(NZ([出金額])+NZ(DSum("出金額","テーブル","ID<" & [ID])))) のようになっています。 さてこの段階では残高計算は上手くいきました。しかしながら目的の個別集計、たとえばAさんだけを抽出して残高を計算するにはなっていません。したがって、これを抽出条件で氏名をAさんと入力して絞り込んで残高を計算させると、残高の計算がうまくいかなくなってくるのです。 残高の計算式をどのように変更すればよいのかどなたか教えてください。どうぞ宜しくお願いいたします。 ID 氏名 月日  適用  入金額 出金額  残高 1 Aさん 5/01 文房具.........\0.........\300.......-\300 2 Bさん 5/03 食料品.........\0.........\500.......-\800 3 Aさん 5/04 入金........\1000...........\0.........\200 4 Aさん 5/10 CD.............\0.........\500.......-\300 5 Bさん 5/01 入金........\1000...........\0.........\700 6 Aさん 5/04 お菓子.........\0.........\200.........\500 7 Cさん 5/08 入金.........\500...........\0........\1000 残高はうまく計算されているが、個別に残高が集計されていません。 これをAさんだけを抽出条件で抽出すると ID 氏名  月日  適用  入金額 出金額  残高 1 Aさん 5/01 文房具.......\0........\300.......-\300 3 Aさん 5/04 入金......\1000..........\0.........\200 4 Aさん 5/10 CD...........\0........\500.......-\300 6 Aさん 5/04 お菓子.......\0........\200.........\500 となってしまい、残高が個別計算されなくなってしまいます

  • エクセルで集計

    エクセルでの合計について教えていただきたいのです。 A1~A10000まで日付が、B1~B10000まで数値が入力されています。 B列の数値を50行ごとに合計し、C列に表示する方法。 現在は、sum関数で手作業です。 簡単に表示できる方法を教えてください。 また、C列に合計のある行をD列(D1・D2・D3・・・)、E列(E1・E2・E3・・・)、F列(F1・F2・F3・・・)に並べたいのです。(50行ごとに間引いて表示するような感じです) 現在は、=C50・=C100・=C150のように手作業です。 もっと多量のデータが入力されたシートもあります。また、100行ごと150行ごとなど合計行が違う場合もあります。 エクセル初心者です。 よろしくお願いいたします。

  • エクセル関数 合計について 教えて下さい。

    会社で 頁ごとの金額の合計、『計算後残高』を求める作業をすることになりました。 (1)下の表で、『項目』の返却は入金、延滞は出金で、   入金と出金が 混在しているのです・・・・              (わかりにくくて すみません・・・(+_+)) (2) 1頁の件数は データによって違い、 (3) 『計算後残高』(下の表では 6列)は、データによって列が定まらず、 (4) 『計算後残高』は、その頁のデータの最後の行だけに表示します。 どんな関数を使ったらいいのでしょうか? 何時間も考えておりますが、なかなか・・・・・(;_;q) ご回答を、お待ちしております m(u_u)m よろしくお願い致します!

  • エクセルの集計表で質問です。

        A     B     1  10000   日付 2  15000   日付 3  15000   日付 4  24000   日付 5 4月合計数値 という表があったとします。 まず、この表で"B1"のセルに4月の任意の日付を入力すると、横の"A1"の数値"10000"が"A5"に表示されます。 そして"B2"以降のセルに4月の日付が入力されるとその横の列Aの数値を"A5"に加算表示させるようにしたいのです。4月以外の日付は"A5"に加算表示させないようにします。 つまり、列Bに4月日付(例、『2003/4/25』)が入力された時のみ、その横の列Aの数値が"A5"に加算されていくようにしたいのです。 このような事を数式で実現する事は可能ですか? 可能ならば手段を教えて下さい。 説明が難しい・・・

  • エクセルの関数教えて下さい。

    A列       B列       日付or#EMPTY  日付or#EMPTY   のうちA列に日付が入っていてB列に日付が入っていないものを抽出する数式 A列       B列        日付or#EMPTY  日付or#EMPTY のうちA,Bともにひづけがはいっているものを抽出する数式 を教えて下さい。 よろしくお願いします。

専門家に質問してみよう