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

Cal 関数

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

概要

指定する月・年から休日が赤で表示されるカレンダーを返します。

構文

Cal ( 月 ; 年 )

引数

引数名タイプ備考
数字1-125
数字4桁2006

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

Cal ( 5 ; 2006 )

結果

Su Mo Tu We Th Fr Sa
    1  2 
 3  4  5  6
 7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31         

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

  カスタム関数    Cal ( 月 ; 年 )

  CopyRight©2004,SHAMOTO Syuji
  <http://www.FMPro.jp>
  
  年・月を指定することで祝日・休日を色付けしたカレンダーを得ます。
  カレンダーは、等幅フォントを利用した1フィールドのテキストとなります。
  
  このカスタム関数を引用するに当たっては、必ずコメントも一緒に引用してください。

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


//
// 祝日の判定に HolidayJ 関数(カスタム関数)を使用
// HolidayJ 関数は <http://www.FMPro.jp> を参照のこと
//

Let
(

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

    HOLIDAY_COLOR = RGB ( 255 ; 0 ; 0 ) ;         // 休日の色(赤)
    TODAY_COLOR = RGB ( 0 ; 128 ; 0 ) ;             // 今日の色(緑)

    Y = 年 ;                                 // 指定年(4桁数字)
    M = 月 ;                                 // 指定月(1-12)
    FIRST_DATE = Date ( M ; 1 ; Y ) ;                  // 朔日の日付
    LAST_DATE = Date ( M + 1 ; 0 ; Y ) ;             // 晦日の日付
    N = Day ( LAST_DATE ) ;                     // 晦日の日(月の日数)

    //
    // カレンダー文字列
    //

    CALENDAR_TEXT =
     " 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 " ;
    CALENDAR_BLANK =
     "                             " ;

    //
    // 朔日前の空白文字列
    //

    PREVIOUS =
   Left ( CALENDAR_BLANK; ( DayOfWeek ( FIRST_DATE ) - 1 ) * 3 ) ;

    //
    // 晦日後の空白文字列
    //

    NEXT =
   Left ( CALENDAR_BLANK ; ( 7 - DayOfWeek ( LAST_DATE ) ) * 3 + 1 ) ;

    //
    // 曜日ラベル
    //

    LABEL =
     "Su Mo Tu We Th Fr Sa " ;

    //
    // 1行カレンダー
    //

    CALENDAR_TEMP =
    LABEL &
    PREVIOUS &
   Left ( CALENDAR_TEXT ; ( N - 1 ) * 3 + 2 ) &
    NEXT ;

    //
    // 色の置換
    // Substitute ( TXT ; [ 検索TXT1 ; 置換TXT1 ]; [ 検索TXT2 ; 置換TXT2 ]; .... )
    //  [ 検索TXT1 ; 置換TXT1 ] の部分を曜日ラベルと1日から31日まで
    //

    COLOR_CALENDAR_TEMP =
   Substitute (
        CALENDAR_TEMP ;

        // 曜日ラベル
        [ "Su" ; TextColor ( "Su" ; HOLIDAY_COLOR ) ] ;

        // 1日
        [ Case (
           DayOfWeek ( FIRST_DATE ) = 1 or             // 日曜日 or
            not IsEmpty ( HolidayJ ( FIRST_DATE ) ) ;         // 休日 ;
           Right ( " " & Day ( FIRST_DATE ) ; 2 ) & " "
            ) ;
       TextColor ( Right ( " " & Day ( FIRST_DATE ) ; 2 ) & " " ; HOLIDAY_COLOR ) ] ;

        // 2日
        [ Case (
           DayOfWeek ( FIRST_DATE + 1 ) = 1 or
            not IsEmpty ( HolidayJ ( FIRST_DATE + 1 ) ) ;
           Right ( " " & Day ( FIRST_DATE + 1 ) ; 2 ) & " "
            ) ;
       TextColor ( Right ( " " & Day ( FIRST_DATE + 1 ) ; 2 ) & " " ; HOLIDAY_COLOR ) ] ;

        // 3日
        [ Case (
           DayOfWeek ( FIRST_DATE + 2 ) = 1 or
            not IsEmpty ( HolidayJ ( FIRST_DATE + 2 ) ) ;
           Right ( " " & Day ( FIRST_DATE + 2 ) ; 2 ) & " "
            ) ;
       TextColor ( Right ( " " & Day ( FIRST_DATE + 2 ) ; 2 ) & " " ; HOLIDAY_COLOR ) ] ;

        // 4日
        [ Case (
           DayOfWeek ( FIRST_DATE + 3 ) = 1 or
            not IsEmpty ( HolidayJ ( FIRST_DATE + 3 ) ) ;
           Right ( " " & Day ( FIRST_DATE + 3 ) ; 2 ) & " "
            ) ;
       TextColor ( Right ( " " & Day ( FIRST_DATE + 3 ) ; 2 ) & " " ; HOLIDAY_COLOR ) ] ;

        // 5日
        [ Case (
           DayOfWeek ( FIRST_DATE + 4 ) = 1 or
            not IsEmpty ( HolidayJ ( FIRST_DATE + 4 ) ) ;
           Right ( " " & Day ( FIRST_DATE + 4 ) ; 2 ) & " "
            ) ;
       TextColor ( Right ( " " & Day ( FIRST_DATE + 4 ) ; 2 ) & " " ; HOLIDAY_COLOR ) ] ;

        // 6日
        [ Case (
           DayOfWeek ( FIRST_DATE + 5 ) = 1 or
            not IsEmpty ( HolidayJ ( FIRST_DATE + 5 ) ) ;
           Right ( " " & Day ( FIRST_DATE + 5 ) ; 2 ) & " "
            ) ;
       TextColor ( Right ( " " & Day ( FIRST_DATE + 5 ) ; 2 ) & " " ; HOLIDAY_COLOR ) ] ;

        // 7日
        [ Case (
           DayOfWeek ( FIRST_DATE + 6 ) = 1 or
            not IsEmpty ( HolidayJ ( FIRST_DATE + 6 ) ) ;
           Right ( " " & Day ( FIRST_DATE + 6 ) ; 2 ) & " "
            ) ;
       TextColor ( Right ( " " & Day ( FIRST_DATE + 6 ) ; 2 ) & " " ; HOLIDAY_COLOR ) ] ;

        // 8日
        [ Case (
           DayOfWeek ( FIRST_DATE + 7 ) = 1 or
            not IsEmpty ( HolidayJ ( FIRST_DATE + 7 ) ) ;
           Right ( " " & Day ( FIRST_DATE + 7 ) ; 2 ) & " "
            ) ;
       TextColor ( Right ( " " & Day ( FIRST_DATE + 7 ) ; 2 ) & " " ; HOLIDAY_COLOR ) ] ;

        // 9日
        [ Case (
           DayOfWeek ( FIRST_DATE + 8 ) = 1 or
            not IsEmpty ( HolidayJ ( FIRST_DATE + 8 ) ) ;
           Right ( " " & Day ( FIRST_DATE + 8 ) ; 2 ) & " "
            ) ;
       TextColor ( Right ( " " & Day ( FIRST_DATE + 8 ) ; 2 ) & " " ; HOLIDAY_COLOR ) ] ;

        // 10日
        [ Case (
           DayOfWeek ( FIRST_DATE + 9 ) = 1 or
            not IsEmpty ( HolidayJ ( FIRST_DATE + 9 ) ) ;
           Right ( " " & Day ( FIRST_DATE + 9 ) ; 2 ) & " "
            ) ;
       TextColor ( Right ( " " & Day ( FIRST_DATE + 9 ) ; 2 ) & " " ; HOLIDAY_COLOR ) ] ;

        // 11日
        [ Case (
           DayOfWeek ( FIRST_DATE + 10 ) = 1 or
            not IsEmpty ( HolidayJ ( FIRST_DATE + 10 ) ) ;
           Right ( " " & Day ( FIRST_DATE + 10 ) ; 2 ) & " "
            ) ;
       TextColor ( Right ( " " & Day ( FIRST_DATE + 10 ) ; 2 ) & " " ; HOLIDAY_COLOR ) ] ;

        // 12日
        [ Case (
           DayOfWeek ( FIRST_DATE + 11 ) = 1 or
            not IsEmpty ( HolidayJ ( FIRST_DATE + 11 ) ) ;
           Right ( " " & Day ( FIRST_DATE + 11 ) ; 2 ) & " "
            ) ;
       TextColor ( Right ( " " & Day ( FIRST_DATE + 11 ) ; 2 ) & " " ; HOLIDAY_COLOR ) ] ;

        // 13日
        [ Case (
           DayOfWeek ( FIRST_DATE + 12 ) = 1 or
            not IsEmpty ( HolidayJ ( FIRST_DATE + 12 ) ) ;
           Right ( " " & Day ( FIRST_DATE + 12 ) ; 2 ) & " "
            ) ;
       TextColor ( Right ( " " & Day ( FIRST_DATE + 12 ) ; 2 ) & " " ; HOLIDAY_COLOR ) ] ;

        // 14日
        [ Case (
           DayOfWeek ( FIRST_DATE + 13 ) = 1 or
            not IsEmpty ( HolidayJ ( FIRST_DATE + 13 ) ) ;
           Right ( " " & Day ( FIRST_DATE + 13 ) ; 2 ) & " "
            ) ;
       TextColor ( Right ( " " & Day ( FIRST_DATE + 13 ) ; 2 ) & " " ; HOLIDAY_COLOR ) ] ;

        // 15日
        [ Case (
           DayOfWeek ( FIRST_DATE + 14 ) = 1 or
            not IsEmpty ( HolidayJ ( FIRST_DATE + 14 ) ) ;
           Right ( " " & Day ( FIRST_DATE + 14 ) ; 2 ) & " "
            ) ;
       TextColor ( Right ( " " & Day ( FIRST_DATE + 14 ) ; 2 ) & " " ; HOLIDAY_COLOR ) ] ;

        // 16日
        [ Case (
           DayOfWeek ( FIRST_DATE + 15 ) = 1 or
            not IsEmpty ( HolidayJ ( FIRST_DATE + 15 ) ) ;
           Right ( " " & Day ( FIRST_DATE + 15 ) ; 2 ) & " "
            ) ;
       TextColor ( Right ( " " & Day ( FIRST_DATE + 15 ) ; 2 ) & " " ; HOLIDAY_COLOR ) ] ;

        // 17日
        [ Case (
           DayOfWeek ( FIRST_DATE + 16 ) = 1 or
            not IsEmpty ( HolidayJ ( FIRST_DATE + 16 ) ) ;
           Right ( " " & Day ( FIRST_DATE + 16 ) ; 2 ) & " "
            ) ;
       TextColor ( Right ( " " & Day ( FIRST_DATE + 16 ) ; 2 ) & " " ; HOLIDAY_COLOR ) ] ;

        // 18日
        [ Case (
           DayOfWeek ( FIRST_DATE + 17 ) = 1 or
            not IsEmpty ( HolidayJ ( FIRST_DATE + 17 ) ) ;
           Right ( " " & Day ( FIRST_DATE + 17 ) ; 2 ) & " "
            ) ;
       TextColor ( Right ( " " & Day ( FIRST_DATE + 17 ) ; 2 ) & " " ; HOLIDAY_COLOR ) ] ;

        // 19日
        [ Case (
           DayOfWeek ( FIRST_DATE + 18 ) = 1 or
            not IsEmpty ( HolidayJ ( FIRST_DATE + 18 ) ) ;
           Right ( " " & Day ( FIRST_DATE + 18 ) ; 2 ) & " "
            ) ;
       TextColor ( Right ( " " & Day ( FIRST_DATE + 18 ) ; 2 ) & " " ; HOLIDAY_COLOR ) ] ;

        // 20日
        [ Case (
           DayOfWeek ( FIRST_DATE + 19 ) = 1 or
            not IsEmpty ( HolidayJ ( FIRST_DATE + 19 ) ) ;
           Right ( " " & Day ( FIRST_DATE + 19 ) ; 2 ) & " "
            ) ;
       TextColor ( Right ( " " & Day ( FIRST_DATE + 19 ) ; 2 ) & " " ; HOLIDAY_COLOR ) ] ;

        // 21日
        [ Case (
           DayOfWeek ( FIRST_DATE + 20 ) = 1 or
            not IsEmpty ( HolidayJ ( FIRST_DATE + 20 ) ) ;
           Right ( " " & Day ( FIRST_DATE + 20 ) ; 2 ) & " "
            ) ;
       TextColor ( Right ( " " & Day ( FIRST_DATE + 20 ) ; 2 ) & " " ; HOLIDAY_COLOR ) ] ;

        // 22日
        [ Case (
           DayOfWeek ( FIRST_DATE + 21 ) = 1 or
            not IsEmpty ( HolidayJ ( FIRST_DATE + 21 ) ) ;
           Right ( " " & Day ( FIRST_DATE + 21 ) ; 2 ) & " "
            ) ;
       TextColor ( Right ( " " & Day ( FIRST_DATE + 21 ) ; 2 ) & " " ; HOLIDAY_COLOR ) ] ;

        // 23日
        [ Case (
           DayOfWeek ( FIRST_DATE + 22 ) = 1 or
            not IsEmpty ( HolidayJ ( FIRST_DATE + 22 ) ) ;
           Right ( " " & Day ( FIRST_DATE + 22 ) ; 2 ) & " "
            ) ;
       TextColor ( Right ( " " & Day ( FIRST_DATE + 22 ) ; 2 ) & " " ; HOLIDAY_COLOR ) ] ;

        // 24日
        [ Case (
           DayOfWeek ( FIRST_DATE + 23 ) = 1 or
            not IsEmpty ( HolidayJ ( FIRST_DATE + 23 ) ) ;
           Right ( " " & Day ( FIRST_DATE + 23 ) ; 2 ) & " "
            ) ;
       TextColor ( Right ( " " & Day ( FIRST_DATE + 23 ) ; 2 ) & " " ; HOLIDAY_COLOR ) ] ;

        // 25日
        [ Case (
           DayOfWeek ( FIRST_DATE + 24 ) = 1 or
            not IsEmpty ( HolidayJ ( FIRST_DATE + 24 ) ) ;
           Right ( " " & Day ( FIRST_DATE + 24 ) ; 2 ) & " "
            ) ;
       TextColor ( Right ( " " & Day ( FIRST_DATE + 24 ) ; 2 ) & " " ; HOLIDAY_COLOR ) ] ;

        // 26日
        [ Case (
           DayOfWeek ( FIRST_DATE + 25 ) = 1 or
            not IsEmpty ( HolidayJ ( FIRST_DATE + 25 ) ) ;
           Right ( " " & Day ( FIRST_DATE + 25 ) ; 2 ) & " "
            ) ;
       TextColor ( Right ( " " & Day ( FIRST_DATE + 25 ) ; 2 ) & " " ; HOLIDAY_COLOR ) ] ;

        // 27日
        [ Case (
           DayOfWeek ( FIRST_DATE + 26 ) = 1 or
            not IsEmpty ( HolidayJ ( FIRST_DATE + 26 ) ) ;
           Right ( " " & Day ( FIRST_DATE + 26 ) ; 2 ) & " "
            ) ;
       TextColor ( Right ( " " & Day ( FIRST_DATE + 26 ) ; 2 ) & " " ; HOLIDAY_COLOR ) ] ;

        // 28日
        [ Case (
           DayOfWeek ( FIRST_DATE + 27 ) = 1 or
            not IsEmpty ( HolidayJ ( FIRST_DATE + 27 ) ) ;
           Right ( " " & Day ( FIRST_DATE + 27 ) ; 2 ) & " "
            ) ;
       TextColor ( Right ( " " & Day ( FIRST_DATE + 27 ) ; 2 ) & " " ; HOLIDAY_COLOR ) ] ;

        // 29日
        [ Case (
            N ≥ 29 and
           DayOfWeek ( FIRST_DATE + 28 ) = 1 or
            not IsEmpty ( HolidayJ ( FIRST_DATE + 28 ) ) ;
           Right ( " " & Day ( FIRST_DATE + 28 ) ; 2 ) & " "
            ) ;
       TextColor ( Right ( " " & Day ( FIRST_DATE + 28 ) ; 2 ) & " " ; HOLIDAY_COLOR ) ] ;

        // 30日
        [ Case (
            N ≥ 30 and
           DayOfWeek ( FIRST_DATE + 29 ) = 1 or
            not IsEmpty ( HolidayJ ( FIRST_DATE + 29 ) ) ;
           Right ( " " & Day ( FIRST_DATE + 29 ) ; 2 ) & " "
            ) ;
       TextColor ( Right ( " " & Day ( FIRST_DATE + 29 ) ; 2 ) & " " ; HOLIDAY_COLOR ) ] ;

        // 31日
        [ Case (
            N ≥ 31 and
           DayOfWeek ( FIRST_DATE + 30 ) = 1 or
            not IsEmpty ( HolidayJ ( FIRST_DATE + 30 ) ) ;
           Right ( " " & Day ( FIRST_DATE + 30 ) ; 2 ) & " "
            ) ;
       TextColor ( Right ( " " & Day ( FIRST_DATE + 30 ) ; 2 ) & " " ; HOLIDAY_COLOR ) ] ;

        // 今日
        [ Case (
       Year ( Get ( 日付 ) ) = Y and Month ( Get ( 日付 ) ) = M ;
           Right ( " " & Day ( Get ( 日付 ) ) ; 2 ) & " "
            ) ;
       TextColor ( Right ( " " & Day ( Get ( 日付 ) ) ; 2 ) & " " ; TODAY_COLOR ) ]

    ) ;     //----- 色の置換終了 ------------------------------------------------

    //
    // 最終的なカレンダーの文字列に改行を加えていく
    //

    CALENDAR =
   Middle ( COLOR_CALENDAR_TEMP ; 1 ; 20 ) & "¶" &
   Middle ( COLOR_CALENDAR_TEMP ; 22 ; 20 ) & "¶" &
   Middle ( COLOR_CALENDAR_TEMP ; 43 ; 20 ) & "¶" &
   Middle ( COLOR_CALENDAR_TEMP ; 64 ; 20 ) & "¶" &
   Middle ( COLOR_CALENDAR_TEMP ; 85 ; 20 ) & "¶" &
   Middle ( COLOR_CALENDAR_TEMP ; 106 ; 20 ) & "¶" &
   Middle ( COLOR_CALENDAR_TEMP ; 127 ; 20 )
    
    ] ;  // === Let_End ==================================

    // 等幅Fontを指定;"Courier New";"Osaka−等幅"
    // Mac,Win共通で利用できる"Courier New"を指定
   Case (
        not ( IsEmpty ( M ) or IsEmpty ( Y ) ) ;
       TextStyleAdd ( TextFont ( CALENDAR ; "Courier New" ; 英語 ) ; 太字 )
    )
)

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

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

詳細説明

年・月を指定することで祝日・休日を色付けしたカレンダーを得ます。
カレンダーは、等幅フォントを利用した1フィールドのテキストとなります。
祝日の判定にHolidayJ関数(カスタム関数)を使用しています。

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

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

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

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