• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excelについて質問です。 )

Excel会費管理の疑問

このQ&Aのポイント
  • Excelを使って会費管理のエクセルシートを作成しています。
  • しかし、関数やマクロ、VBAに詳しくないため、TODAY関数を使用して会費の継続・期限切れを確認する方法がわかりません。
  • 具体的には、2年目の振込があった時点で、期限が4年目までになるような方法を知りたいです。

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

  • ベストアンサー
回答No.4

こんにちは F4のセルに下記の数式を入力してF5にコピーしてみてください。 =IF(A4="","",IF(COUNT($B4:$E4)<MATCH(DATEVALUE(YEAR(TODAY())&"/3/31"),$B$3:$E$3,0)-1,"期限切れ","継続中")) 前提条件 1.前年度まで会費を納入していれば、前年度の納入期限を過ぎていても継続とみなす。 2.前年度に会費が納入されていなければ、期限切れとする。 3.納入日は常に連続している。 という勝手な解釈で作成してみました。 <解説> =IF(A4="","",継続中、期限切れの判断) A4に人の名前が入っていなければ空白表示、でなければ判断します。 継続中、期限切れの判断 IF(COUNT($B4:$E4)<MATCH(DATEVALUE(YEAR(TODAY())&"/3/31"),$B$3:$E$3,0)-1,"期限切れ","継続中") 今年が何年目(何列目)かを取得して、納入回数がその年数-1(前年まで年数)よりも小さければ、前年度に納入 していないことがわかります。 従って、まず納入回数をCOUNT($B4:$E4)で取得します。 次に、何年目であるかを取得します。 MATCH(DATEVALUE(YEAR(TODAY())&"/3/31"),$B$3:$E$3,0)-1 B列の納入期限を検索範囲、今年の年+"3/31"を検索値として その列の位置が何列目なのかを取得します。 DATEVALUEは、この文字列形の日付をシリアル値に変換しています。 こうしないと、文字とシリアル値の比較になって検索できないからです。 前年度のまで入力されていれば継続中としますので、前々年度が空白か否かで継続中か期限切れを判断します。 従って、前年度までの年数と比較するために最後に-1を入れています。 これで、納入回数 < 前年度までの年数ならば、"期限切れ" そうでないならば、"継続中"と判断することができます。 ただし、この方法は納入期限の月日があくまでも3/31の場合なので 変更する場合は注意してください。 できれば、納入期限の上の行辺りに隠しセルを用意してそこを年度だけを用意して、キーにするのをお勧めします。 あまり説明がよくないかもしれませんが^^; 意図しない結果だったらご容赦ください。 以上、ご参考まで

kiseki0327
質問者

お礼

ありがとうございます!! 参考になりました!! 無事解決できました。

その他の回答 (4)

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

解答No2です。ごめんなさい。式を間違いていました。 F4セルに次の式を入力し下方にドラッグコピーしてください。 =IF(A4="","",IF(INDEX($2:$2,IF(C4<>"",COLUMN(E4),COUNT(B4:E4)+1))<TODAY(),"期限切れ","継続中"))

kiseki0327
質問者

お礼

ありがとうございます!! 参考になりました!! 無事解決できました。

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

こんにちは! 解釈が違っていたらごめんなさい。 振込日はまったく関係なくて、 B列のみの入力であれば、C3セル日付が「今日」以前であれば、「期限切れ」と表示、 C列以降に入力があればE3セル日付が「今日」以前であれば「期限切れ」 そうでなければ「継続中」となれば良いわけですかね? もしそうであればF4セルに =IF(A4="","",IF(COUNTA(B4:E4)<2,IF($C$3<TODAY(),"期限切れ","継続中"),IF($E$3<TODAY(),"期限切れ","継続中"))) という数式を入れオートフィルで下へコピーしてみてください。 以上、参考になれば幸いですが、 的外れならごめんなさいね。m(__)m

kiseki0327
質問者

お礼

ありがとうございます!! 参考になりました!! 無事解決できました。

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

F2セルに次の式を入力し下方にドラッグコピーします。 =IF(A3="","",IF(INDEX($2:$2,IF(C3<>"",COLUMN(E3),COUNT(B3:E3)+1))<TODAY(),"期限切れ","継続中"))

kiseki0327
質問者

お礼

有難うございます。 やってみましたが、うまくいきませんでした。。。

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

 数値が入力されているセルの数を数える COUNT関数 と  参照するセルを指定する INDEX関数 や INDIRECT関数、OFFSET関数 などを組み合わせて使ってはいかがでしょう  =INDEX(B4:E4,1,COUNT(B4:E4))  =INDIRECT(CHAR(65+COUNT(B4:E4))&ROW())  =OFFSET(A4,0,COUNT(B4:E4)) これらで日付を入力する範囲の一番右に入力されている数字を参照することができます あとは TODAY関数と比較するセル番号にこの関数を入れるだけです (分かりやすいのは、INDEX関数と、OFFSET関数かな) それぞれ Excelのヘルプを参照してどんな使い方をしているのかを確認して 理解した上で使うことをお奨めします (そうすれば、いくらでも応用が利きます)

kiseki0327
質問者

お礼

ありがとうございます。 ヘルプを読み勉強になりました! しかし、うまく組みこむことができませんでした・・・涙 一番右に入力されている数字を参照するというより 一番右に入力されている列番号(B~E)が把握できればいいのですが・・・ 勉強不足ですみません。