★★★★★★Access2000VBA・Excel2000VBA独学~★★★日付の列から、「年度」や「月度」を出す関数式~
※まだ書きかけです。すみません。
※間違ってたらすみません。
※メモ書きなので、自分でも意味不明な箇所も多いです。ごめんなさい。
※関連記事
『 ★★★★★★Access2000VBA・Excel2000VBA独学~★★★日付の列から、好きな基準で・特定の「独自期間」でグループ化し「その期間名」を出す・付ける関数式~ 』
★ はじめに
「締め日をいつにするか」や、「ベタな日付ごとではなくて、年度ごと、締め日ごとに集計したい」、という場合、いちいち締め日を出すと大変なので、関数で出します。
ピボットやMySQLで集計するときにもとても便利です。
日付の列さえあればいいわけですので。
ただし、日付データは必ずシリアル値での日付である必要があります。
Webか何かで拾った式ですので、詳しいことはわかりませんが、ご参考にしてください。
★ 年度を出す関数式
(3/20締め=3月21日からが新年度の場合) ↓3-1? ↓締め日
=TEXT(DATE(YEAR(日付セル),MONTH(日付セル)-2,(DAY(日付セル)>20)),"YYYY")
(4/20締め=4月21日からが新年度の場合) ↓4-1?
=TEXT(DATE(YEAR(日付セル),MONTH(日付セル)-3,(DAY(日付セル)>20)),"YYYY")
↑ここをインクリメントする。
(5/20締め=5月21日からが新年度の場合) ↓5-1?
=TEXT(DATE(YEAR(日付セル),MONTH(日付セル)-4,(DAY(日付セル)>20)),"YYYY")
★ 月度を出す関数式
True=1、False=0とみなして、
「締め日の日数に足したときに、必ず31になる、あるいは超える、そういう数値を算出する」
というところがポイントのようです。
式を分解して、シートに書き出してみないとなかなか理解できないと思います。
少なくとも僕はバカですので最初は理解できませんでした。
以下のサンプルファイルなどもご参考にしてみてください。
サンプルファイルダウンロード→こちら「年度締め・月度締めの関数作成.xlsm」
※解凍して、ファイルの各シートを見てみてください。
なお、月末締めの場合だけ、日付の「まんま」で出しやすいので、計算方式が異なります。
※その他の方法:参考Web→『エクセルの学校[[20060513164111]]』
以下、関数です。
(20日締めの場合=21日からが新月度の場合)
=TEXT(日付セル+11*(DAY(日付セル)>20),"M")
(21日締めの場合=22日からが新月度の場合)
=TEXT(日付セル+10*(DAY(日付セル)>21),"M")
(15日締めの場合=16日からが新月度の場合)
=TEXT(日付セル+16*(DAY(日付セル)>15),"M")
↑31-締日 ↑締め日
(10日締めの場合=11日からが新月度の場合)
=TEXT(日付セル+21*(DAY(日付セル)>10),"M")
(月末締めの場合=1日からが新月度の場合)
=TEXT(日付セル,"M") =TEXT(DATE(日付セル),"M")
あるいは、
=TEXT(DATE( YEAR(日付セル), MONTH(日付セル)+1, 0 ),"M")
メモ書き
「DAY($A2)>10」のところで、True=1、False=0とみなして、
「21*(DAY($A2)>10)」のところで、「プラスすると絶対に次月になる」、そういう「日数」を出している。
(※なので、締め日によって、21のところの値を変える必要があります。締め日の日数に足したときに、必ず31になる、あるいは超える数をセットする必要があります。31なら絶対に次月に「行く」ので。)
ただ、30日で終わる月もあれば、31、28、29、の月もあるので、
「$A2+21*(DAY($A2)>10)」の列の年月日は、切り替わりのところが必ずしも切り良く「1日」にならない。
ただし、求めるのは「月度」であって、つまり「月」のため、そのことは影響しない。なのでOK。
★ 締め日を算出する関数式
2007以降のExcelは基本、こちら↓
【Excel】EOMONTH関数を用いた締め日の計算、翌月の支払日の計算
2003以前の古いExcelはこちら↓
10日締めの場合
=DATE(TEXT(DATE(YEAR(日付セル)+1,MONTH(日付セル)-11,(DAY(日付セル)>10)),"YYYY"),TEXT(日付セル+21*(DAY(日付セル)>10),"M"),10)
15日締めの場合
=DATE(TEXT(DATE(YEAR(日付セル)+1,MONTH(日付セル)-11,(DAY(日付セル)>15)),"YYYY"),TEXT(日付セル+16*(DAY(日付セル)>15),"M"),15)
20日締めの場合
=DATE(TEXT(DATE(YEAR(日付セル)+1,MONTH(日付セル)-11,(DAY(日付セル)>20)),"YYYY"),TEXT(日付セル+11*(DAY(日付セル)>20),"M"),20)
月末締めの場合
=DATE(YEAR(日付セル),MONTH(日付セル)+1,1)-1
あるいは、
10日締めの場合
=DATE(YEAR(日付セル),TEXT(日付セル+21*(DAY(日付セル)>10),"M"),10)
15日締めの場合
=DATE(YEAR(日付セル),TEXT(日付セル+16*(DAY(日付セル)>15),"M"),15)
20日締めの場合
=DATE(YEAR(日付セル),TEXT(日付セル+11*(DAY(日付セル)>20),"M"),20)
月末締めの場合
=DATE(YEAR(日付セル),MONTH(日付セル)+1,1)-1
↑ただし、12月がうまくいかないので、結局は前述のややこしいやつがそこだけ必要になる。
- 投稿タグ
- 「ニセモノ」への道, 「本物」に近づくために, AccessVBA, Accessの独学, Access操作の基礎, Accesの独学, ADO/DAO, ExcelSQL, ExcelVBA, Excelの独学, Excel操作の基礎, Excel連携VBA, MicrosoftQuery, ODBC, SQL, パソコンでの自動化, ビジネスパソコンの基礎, ビジネス一般常識, マクロ, ワークシート関数, 独学, 自動化