• ベストアンサー

EXCEL 月末の値の取得

家計簿をEXCELにて作成しているのですが、1年の月末時点での残金が知りたく、色々な関数を試しましたがどうもうまく抽出できません。 下の様に1つの口座の入出金を記録しているのですが、ここから、 ◆1月 \1,077,256 ◆2月 \856,059  ・   ・  ・   ・ と12月までの各月末のデータを抽出しようとした場合、どの様にすればよろしいのでしょうか? どなたかご存じの方、教えて下さい。   A      B      C 2009/1/5   項目名  \897,389 2009/1/10  項目名  \887,389 2009/1/23  項目名  \1,145,746 2009/1/26  項目名  \1,077,256 2009/2/2   項目名  \957,652 2009/2/12   項目名  \887,389 2009/2/25   項目名  \833,652 2009/2/27   項目名  \856,059 2009/3/12   項目名  \651,079   ・      ・     ・   ・      ・     ・   ・      ・     ・

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

  • ベストアンサー
noname#99913
noname#99913
回答No.5

No.1です。次の式をどうぞ。 1月:=VLOOKUP(DATE(2009,1,31),A:D,4,TRUE) 2月:=VLOOKUP(DATE(2009,2,28),A:D,4,TRUE) 3月:=VLOOKUP(DATE(2009,3,31),A:D,4,TRUE)

heintz_w_g
質問者

お礼

自己解決しました。 日付の参照部分を参考に、  =INDEX(D4:D1000,MATCH(DATE($J$1,L$1+1,0),A4:A1000)) で値を出す事ができました。 ヒントをいただき、ありがとうございます。

heintz_w_g
質問者

補足

また他にもカテゴリ別などで集計する為に、  J1・・・年号のみ数値で入力済 / 例:【2009】  L1~W1・・・月を数値で入力済 / 例:【L1/1 : M1/2 : N1/3】 をしておりますので、  =VLOOKUP(DATE(YEAR(J1),MONTH(L1)+1,0),A:D,4,TRUE)  ※J1には2009、L1には1の値が入っています   という様に変更してみましたが、#N/Aで値が帰ってきます。 何か数式間違っているのでしょうか?

その他の回答 (5)

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

No4です。 J1・・・年号のみ数値で入力済 / 例:【2009】  L1~W1・・・月を数値で入力済 / 例:【L1/1 : M1/2 : N1/3】 をしておりますので、 と数値で入れているのであれば  =VLOOKUP(DATE(YEAR(J1),MONTH(L1)+1,0),A:D,4,TRUE) でなくて  =VLOOKUP(DATE(J1,L1+1,0),A:D,4,TRUE) で十分でしょう。 右へコピィしてつかうのであれば =VLOOKUP(DATE($J1,L1+1,0),$A:$D,4,TRUE) としておきましょう。

heintz_w_g
質問者

補足

ありがとうございます。 コピーの部分、参照させていただきました。 皆様、色々ありがとうございます。

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

◆1月 \1,077,256 ◆2月 \856,059 のつきの部分に 2009/1/1 とか日付を入れて表示形式、ユーザー定義で yy年mm月 として09年01月と表示させておきます。 後はVLOOKUP関数で =VLOOKUP(DATE(YEAR(E2),MONTH(E2)+1,0),A2:C10,3) としておけば月末に最も近い日付の値がでると思います。

heintz_w_g
質問者

補足

ありがとうございます。 試してみましたが、実際の構造が、増減を見る為に  A列 : シリアル値で日付  B列 : 項目名  C列 : 月の資金増減を見る為に、資金増減値  D列 : 残高 タイトル、口座情報がヘッダに有る為に、実際の開始行は【A4】からです。 になっており、このままの式を適用すると、C列の値を引いてしまいます。 何とか現在、対策考えておりますが、何か良い方法ご存じでしたら教えて下さい。

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

例えばお示しのデータがA,B,C列の1行目からあるとして、F1セルには2009年1月と入力し下方にオートフィルドラッグすれば2009年2月と続けて表示されますね。 G1セルには次の式を入力し下方にオートフィルドラッグすればよいでしょう。 =IF(F1="","",VLOOKUP(DATE(YEAR(F1),MONTH(F1)+1,0),A:C,3,TRUE))

heintz_w_g
質問者

補足

ありがとうございます。 試してみましたが、実際の構造が、増減を見る為に  A列 : シリアル値で日付  B列 : 項目名  C列 : 月の資金増減を見る為に、資金増減値  D列 : 残高 タイトル、口座情報がヘッダに有る為に、実際の開始行は【A4】からです。 また他にもカテゴリ別などで集計する為に、  J1・・・年号のみ数値で入力済 / 例:【2009】  L1~W1・・・月を数値で入力済 / 例:【L1/1 : M1/2 : N1/3】 の様に横方向で年号と月を持っていて、これを変更する事で翌年度でも対応できる様にシートを作成してあります。 そこで教えていただきました関数をこれに当てはめて改変しましたが、 C列の値を引いてしまいます。何とか現在、対策考えておりますが、何か良い方法ご存じでしたら教えて下さい。

  • _Kyle
  • ベストアンサー率78% (109/139)
回答No.2

A列の値はシルアル値(日付を表す数値)で入ってるんですよね? 仮に、E1セル以下に、"1月","2月","3月",…と文字列形式で月数が入力されているならば、  F1セル : =VLOOKUP(DATE(2009,SUBSTITUTE(E1,"月","")+1,0),A$1:C$999,3,TRUE) として、下方にフィル。 ------------------------------------ 月数が1,2,3,…と数値で入力されているならば、単に  F1セル : =VLOOKUP(DATE(2009,E1+1,0),A$1:C$999,3,TRUE)  でOK。 ------------------------------------ ※DATE(2009,E1+1,0) でその月の最終日の日付が得られるので、  VLOOKUPのTRUE型で、その日付を超えない最大の日付を探します。 ※31とか28とか月の日数にあわせて数式を変える必要はありません。 ご参考まで。

heintz_w_g
質問者

補足

ありがとうございます。 試してみましたが、実際の構造が、増減を見る為に  A列 : シリアル値で日付  B列 : 項目名  C列 : 月の資金増減を見る為に、資金増減値  D列 : 残高 タイトル、口座情報がヘッダに有る為に、実際の開始行は【A4】からです。 また他にもカテゴリ別などで集計する為に、  J1・・・年号のみ数値で入力済 / 例:【2009】  L1~W1・・・月を数値で入力済 / 例:【L1/1 : M1/2 : N1/3】 の様に横方向で年号と月を持っていて、これを変更する事で翌年度でも対応できる様にシートを作成してあります。 そこで教えていただきました関数をこれに当てはめて改変しましたが、 C列の値を引いてしまいます。何とか現在、対策考えておりますが、何か良い方法ご存じでしたら教えて下さい。

noname#99913
noname#99913
回答No.1

次の式を試してください。 1月:=VLOOKUP(DATE(2009,1,31),A:C,3,TRUE) 2月:=VLOOKUP(DATE(2009,2,28),A:C,3,TRUE) 3月:=VLOOKUP(DATE(2009,3,31),A:C,3,TRUE)

heintz_w_g
質問者

補足

ありがとうございます。 試してみましたが、実際の構造が、増減を見る為に A列 : シリアル値で日付 B列 : 項目名 C列 : 月の資金増減を見る為に、資金増減値 D列 : 残高 タイトル、口座情報がヘッダに有る為に、実際の開始行は【A4】からです。 になっており、このままの式を適用すると、C列の値を引いてしまいます。 何とか現在、対策考えておりますが、何か良い方法ご存じでしたら教えて下さい。