〜FileMakerを使って、ゆとりの時間を過ごしましょう〜
 名古屋在住。FileMakerを使ったシステムを受託開発中。
<< 筒井町と出来町の天王祭が始まります | main | 札幌で開催されたFileMaker ワークショップに参加してきました >>
指定した月数分を足した日付の計算

軽い気持ちで作り始めたカスタム関数。。。

数分で終わる予定が数時間もかけてしまいました。

しかも、なぜか

「最初の目的とは違う目的」用のカスタム関数を作ってしまいました (TT)

あれば使うので、作ったことはまぁいいんですが、、、

 

今回作ったのは

「日付に、指定した月数を足した日付を返す」

ことができるカスタム関数です。

 

どういうことかというと、

「指定日」の日付に「月数」を足して「結果」の日付を返します。

 

「指定日」2017年7月31日、「月数」1 だったら、

「結果」2017年8月31日 という日付が返ってきます。

 

 

月末を指定した場合って面倒。。。

「指定日が月末だった場合、日にちはどうなるのが正解?」

なんて考え始めちゃって…。

 

A)指定日が月末日だから、結果は「月数を足した月」の月末日にする

B)指定日は月末日だけど、結果は「月数を足した月」の指定日と同じ日にする

どっちがいいのかなぁと。

 

AとBどっちがいいかはその時々で違いそうな気がしました。

で、結局「タイプ」を指定することで変更できるようにしました。

 

指定日が月末の日付だった場合、

Aにしたいときはタイプに1を指定→指定日が何日であろうと、月末の日付にする

Bにしたいときはタイプに0を指定→指定日と同じ日付にする

ということにしました。

 

(B)の場合でやってみたら、

「結果の日付の月」が「指定日の月」より日数が少ない場合は翌月の日付になることもあって、

それはなんだかしっくりこなかったので、この場合は月末日付を返すことにしました。

 

結局(B)の場合は

B-1)「結果の日付の月」が「指定日の月」より日数が少ない場合は月末日にする

B-2)「結果の日付の月」が「指定日の月」より日数が多い場合は指定日と同じ日にする

の2パターンになりました。

 

 指定日  月数 タイプ   結果     説明

2017/1/31 1   1  2017/2/28  (A)に該当。月末日になる。

2017/1/31 1   0  2017/2/28  (B−1)に該当。月末日になる。

2017/4/30 1   1  2017/5/31  (A)に該当。月末日になる。

2017/4/30 1   0  2017/5/30  (B−2)に該当。指定日と同じ日付になる。

 

こんな感じです。

指定日を2月28日にした場合は、

 

 指定日  月数 タイプ   結果     説明

2017/2/28 1   1  2017/3/31  (A)に該当。月末日になる。

2017/2/28 1   0  2017/3/28  (B−2)に該当。月末日になる。

2017/2/28 -12  1  2016/2/29  (A)に該当。月末日になる。

2017/2/28 -12  0  2016/2/28  (B−2)に該当。指定日と同じ日付になる。。

 

こんな計算結果が出るようにしました。

・・・わかりづらい。

うまく説明できてませんがなんとかご理解いただけるとうれしいなと。。。

 

ここにアップするのをためらうほどすっきりしない計算式ではありますが、

『まずは結果が出ればよし』

ということにし、自分用メモとして?アップさせていただきます。

 

関数名:HN_PlusMonth( TheDate ; PlusNum ; Type )

引数:

TheDate(日付タイプ:この日を基準に計算する)

PlusNum(数字タイプ:ここで指定した数字をTheDateの日付の月に足す)

Type(数字タイプ:0か1を指定する。1=月末日付にする、0=そのままの日付にする)

 

関数は↓

 

/* 目的:[TheDate]に指定した日付の月に、[PlusNum]に指定した数字を足して返す。
    指定した日付が月末日だった場合、
    [Type]が1だったら月末日を、1ではなかったら月末日ではない日付を返す。
関数:HN_PlusMonth( TheDate ; PlusNum ; Type )
-------------------------------------------------------------------------------------------*/

Let ( [

YYYY = Year ( TheDate ) ; 
MM = Month( TheDate ) ; 
DD = Day ( TheDate ) ;

 

//指定日が月末日かどうか確認し、月末日でTypeが1だったらLastDateFlgを1にする
NextDate = Date ( MM ; DD + 1 ; YYYY ) ; 
NextDateMonth = Month ( NextDate ) ; 
LastDateFlg = Case ( 
                      MM = NextDateMonth ; 0 ;
//月末日ではない
                      Type  = 1 ; 1 ; //月末日で、月末日の場合の指示が1(=月末日を返す)
                      0 //月末日で、月末日の場合の指示が1ではない(=月末日でなくてもよい)
                        );


//指定日に追加月数を足した日付の月が、追加月数を足した月と同じ月になっているか確認し、
//同じだったらSameMonthFlgを1にする

YMD_a = Date ( MM + PlusNum ; DD ; YYYY ) ; //素直に足しただけ
YMD_b = Date ( MM + PlusNum ; 1 ; YYYY ) ; //月を足したときの1日の月数を確認する
MM_a = Month ( YMD_a ) ;  
MM_b = Month ( YMD_b ) ; 

SameMonthFlg = Case ( 
                           MM_a = MM_b ; 1 ;
//月を足した後の日付の月数が1日の月数と同じになってる
                           0 //月を足した後の日付の月数が1日の月数と異なっている(=月末日を返す)
                             ) ;


YMD_c = Date ( MM + PlusNum + 1 ; 0 ; YYYY ) //月を足した月の月末日

 
] ;


Case ( 
IsEmpty ( TheDate ) ; GetAsDate ( "" ) ;

LastDateFlg = 1 ; YMD_c ;
SameMonthFlg = 1 ; YMD_a ;
YMD_c 

) //case

 

) //let


/*----------------------------------------------------------------------------------------
Create Hifumi Nakaoka 2017.06.16*/

 

 

多分これで大丈夫だと思う。ちょっと試してみた感じでは…

[PlusNum]にマイナス数を指定すると、

指定月の○ヶ月前が結果として返るはす…です。

試した結果を貼っておきます。

指定月の加算日付

 

(いつものくだりがここから始まります<(_ _)>)

 

お役に立てるようでしたらお使いくださいませ。

これをタタキにもっとかっこいい計算書いていただければ幸いです^^;

 

なお、今回も

ご紹介した計算式の使い方、ご質問などはお受けしておりません。

また、ご利用になる場合はご自身の責任でお使いくださいますようお願いいたします。

 

それと、相変わらず打たれ弱いので、ツッコミなどはこっそりメールでお願いします。

ということで、せっかく作ったので書かせていただきました。

 

いくらなんでもかかりすぎたこの時間、

どうやって取り戻そうか思案しながらのこの週末、

日曜日は札幌のワークショップに参加してきます!楽しみ〜♪

| Hifumi N. | FileMakerのこと | 17:47 | comments(2) | - | pookmark |
今、欲しい FM カスタム関数をさがしてたら、一番最初にヒットしました。

使わせて頂きます。ありがとうございます。m(_ _)m
| Shoichi Miyamura | 2019/08/06 4:27 PM |
Miyamura様
コメントありがとうございます。
お役に立てたならとってもとーってもうれしいです\(^o^)/
目的がすり替わった関数を、こんなに時間をかけて作ってしまい、
使うことがないまま月日が経っておりました。
おかげさまで、またカスタム関数作る気力が湧いてきました。
いつになるかわからないけど、何を作るか決めていないけど^^;
| HifumiN. | 2019/08/07 12:54 AM |









CALENDAR
SMTWTFS
  12345
6789101112
13141516171819
20212223242526
2728293031  
<< October 2019 >>
SELECTED ENTRIES
CATEGORIES
ARCHIVES
RECENT COMMENTS
  • 指定した月数分を足した日付の計算
    HifumiN. (08/07)
  • 指定した月数分を足した日付の計算
    Shoichi Miyamura (08/06)
  • 今年も北海道でフロコンが開催されます
    HifumiN. (04/09)
  • 今年も北海道でフロコンが開催されます
    さちりん (04/09)
  • MacでFileMaker 17、または16を使っている方はOSをアップするのは待ちましょう
    HifumiN. (12/13)
  • MacでFileMaker 17、または16を使っている方はOSをアップするのは待ちましょう
    nao (12/04)
  • MacでFileMaker 17、または16を使っている方はOSをアップするのは待ちましょう
    HifumiN. (11/28)
  • MacでFileMaker 17、または16を使っている方はOSをアップするのは待ちましょう
    nao (11/22)
  • MacでFileMaker 17、または16を使っている方はOSをアップするのは待ちましょう
    nao (11/22)
  • MacでFileMaker 17、または16を使っている方はOSをアップするのは待ちましょう
    HifumiN. (11/22)
商標について
FileMaker、ファイルメーカー、FileMaker Cloud、FileMaker Go およびファイルフォルダロゴは、Claris International Inc. (旧 FileMaker, Inc.) の米国および/またはその他の国における登録商標です。
Claris、Clarisロゴおよび FileMaker WebDirect は、Claris International Inc. (旧 FileMaker, Inc.) の商標です。その他のすべての商標は該当する所有者の財産です。

FileMaker、ファイルメーカー及び Bento は、米国およびその他の国における FileMaker, Inc. の登録商標です。
ファイルフォルダロゴ及び Bento ロゴは、FileMaker, Inc. の商標です。
なお本文では「®」「™」は明記しておりません。
このブログについて
FileMakerというデータベースソフトに関する話題を中心に書いています。
長年の受託開発会社での開発経験を元に、皆さまに役立つ情報が発信できればと思います。
profile
人気ブログランキングへ
FileMakerの取得資格
usagi-mimi
usagi-mimi
メールはこちらから
MOBILE
qrcode
LINKS
PROFILE
このページの先頭へ