http://FMPro.info  FileMaker Pro 関連総合ポータルサイト

HappyMonday 関数

カテゴリー : 日付
計算結果のデータタイプ : 日付
対応FileMakerバージョン : 対応 7  対応 8  対応 8.5  対応 9  対応 10  対応 11  未対応 12  未対応 13  未対応 14  未対応 15
作者 : 社本修司 株式会社ジェネコム

概要

何年・何月・第何週・何曜日 を指定することで、その日付を得ます。

構文

HappyMonday ( 週 ; 曜日 ; 月 ; 年 )

引数

引数名タイプ備考
数字1-5または0(0の場合最終週)0
曜日テキスト曜日
数字1-123
数字4桁2005

別のウィンドウで、引数の値を変更してテストすることが出来ます

HappyMonday ( 0 ; "月" ; 3 ; 2005 )

結果

2005.03.28

/*==============================================================

  カスタム関数    HappyMonday ( 週 ; 曜日 ; 月 ; 年 )

  CopyRight©2004,SHAMOTO Syuji
  <http://www.FMPro.jp>
  
  HappyMonday という関数名ですが、月曜日に限らず、
  何年・何月・第何週・何曜日 を指定することで、その日付を得ます。
  第何週に "0" を指定することで、その月の最後の指定曜日の日付を得ることもできます。
  曜日の指定は、
  「月曜日」・「月」・「Monday」・「Mon」・「2(数字形式;1=Sun , 2=Mon ... 7=Sat)」
  の各形式に対応しています。
  
  このカスタム関数を引用するに当たっては、必ずコメントも一緒に引用してください。

=============================================================*/


Let
(

    [  // === Let_Start ==================================

    W = 週 ;                     // 第何週を1~5の数字で指定・0の場合は最後の週

    //----------------------------------------------------------------------
    // 曜日の形式を得るためのリスト
    //----------------------------------------------------------------------

    WeekListN = "7 6 5 4 3 2 1 " ;
    WeekListE = "Saturday   Friday    Thursday  Wednesday Tuesday   Monday    Sunday    " ;
    WeekListJ = "土 金 木 水 火 月 日 " ;

    //----------------------------------------------------------------------
    // Sun=7 ; Mon=6 ; Tue=5 ; Wed=4 ; Thu=3 ; Fri=2 ; Sat=1
    // の結果を各形式の曜日から得るために上記定義のリストの何番目に位置するかを計算
    //----------------------------------------------------------------------

    N =
    Case(
       PatternCount ( WeekListN ; GetAsNumber ( 曜日 ) ) ;     // 数字形式の場合
            ( Position ( WeekListN ; GetAsNumber ( 曜日 ) ; 1 ; 1 ) + 1 ) / 2 ;
       PatternCount ( WeekListE ; Proper ( 曜日 ) ) ;             // 英語表記の場合
            ( Position ( WeekListE ; Proper ( 曜日 ) ; 1 ; 1 ) + 9 ) / 10 ;
       PatternCount ( WeekListJ ; Left ( 曜日 ; 1 ) ) ;             // 日本語表記の場合
            ( Position ( WeekListJ ; Left ( 曜日 ; 1 ) ; 1 ; 1 ) + 1 ) / 2
    ) ;

    Y = 年 ;                                         // 指定年(4桁数字)
    M = Case (
            W = 0 ;                                 // 0 = 最後の週 = 次の月の第0週
            月 + 1 ;
            月                                    // 指定月(1-12)
        ) ;

    //----------------------------------------------------------------------
    // エラー処理なしの結果
    //----------------------------------------------------------------------

    theDate = Date ( M ; ( 7 * W + 1 ) - DayOfWeek ( Date ( M ; N ; Y ) ) ; Y )

    ] ; // === Let_End ==================================


    Case(
        
        not ( IsEmpty ( Y ) or IsEmpty( M ) or IsEmpty ( W ) or IsEmpty ( N ) ) and
        ( 月 = Month ( theDate ) ) ;     // 指定月にある場合のみ
        theDate
    )
)

// ©2004,SHAMOTO Syuji <http://www.FMPro.jp>

エンコードは Unicode (UTF-8)、改行タイプは LF (Unix) 形式のテキストとして保存します。
テキストエディタで正常に開かない場合は、エンコードを指定してファイルを開くようにしてください。

詳細説明

HappyMonday という関数名ですが、月曜日に限らず、
何年・何月・第何週・何曜日 を指定することで、その日付を得ます。
第何週に "0" を指定することで、その月の最後の指定曜日の日付を得ることもできます。
曜日の指定は、
「月曜日」・「月」・「Monday」・「Mon」・「2(数字形式;1=Sun , 2=Mon ... 7=Sat)」
の各形式に対応しています。

この関数が使用する他のカスタム関数

この関数を使用する他のカスタム関数

注意:ここで紹介されているカスタム関数をご自分のシステムに組み込んだ場合に発生した問題についてはFMPro.infoは責任を負いません。

Copyright © 2004-2009 FMPro.info All Rights Reserved.