勤務表もFileMakerで作っていますが、今までエクセルで1年分の勤務表データを作成後FileMakerにインポートする形をとっていました。使用しているPCがWindows10 64bitになり32bit版のエクセルが使えなくなりました。もちろん他の表計算ソフトを使えばできるのですが、今回はFileMakerで1年分の勤務表データを自動作成するスクリプトを作ってみました。Loopコマンドを使えば簡単にスクリプトを作ることができます。
目次
スプレッドシートによるデータ作成
以下はGoogleスプレッドシートを使ったデータのインポート方法です
一番上の行に
- 日付
- 勤務地
- 職種
- 職種別優先順位
日付は2019/1/1~2019/12/31を連続データ入力
勤務地、職種、職種別優先順位をコピペ入力
これをFileMakerでインポート
この方法の欠点は勤務地が複数あったり職員が多い場合は同じことを何回か繰り返す必要があり手間がかかることです
FileMakerによる自動作成
FileMakerでのフィールド作成
入力したいフィールド名は
- 日付
- 勤務地
- 職種
- 職種別優先順位
の4つだけ
他のフィールド名は先頭にgがついていてグローバルフィールドで、すべてのデータに反映されるフィールド
あらかじめ入力したいデータをいれておき、それをコピーするために使います
- g自動入力年
- g勤務地
- g職種
- g職種別優先順位
- g自動入力年の年間日数
=If ( Day ( Date ( 3 ; 0 ; g自動入力年 ) ) = 28 ; 365 ; 366 )
・・・g自動入力年3月0日は何日か?
→28なら閏年ではないので365
→それ以外なら29なので閏年となり366
FileMakerでの自動作成スクリプト
下は完成したスクリプト
Loopのカウンター用に変数[$count]を設定
変数とは一時的なデータ格納庫で、変数名の前に$をつける
変数$countの初期値を0に設定
右の丸い歯車をクリックして設定
>値を0に設定
一括入力する年の日付設定
2019年なら初期値は2019/1/1
今回は自動入力年の初日を変数$dayに格納
フィールド[自動入力年の初日] =Date ( 1 ; 1 ; g自動入力年 )
自動入力年が365日か366日になるかを場合分けするために
フィールド[g自動入力年の年間日数] =If(day(date(3,0,g自動入力年))=28;365;366)の値により何回Loopさせるか自動的に決定される
Loopに入ったところで$countを1増やしておく。初期値は0なので1回目のLoopでカウンターは1からスタート
フィールド設定でコピーするフィールドを設定しておく
- 勤務地←g勤務地からコピー
- 職種←g職種からコピー
- 職種別優先順位←g職種別優先順位からコピー
最後に日付を次の日付にしておく
$dayを$day+1にするだけ
レイアウト作成
自動作成レイアウト
ボタンを押すだけでデータを自動作成するためのレイアウトを作っておく。
左に
- g自動入力年→2019を入力
- g勤務地→浦和を入力
- g職種→医師
- g職種別優先順位→1
真ん中に自動作成するためのボタンを作り、作ったスクリプトを指定
右にデータが入力されたかどうか確認するためのフィールドを配置
- 日付
- 勤務地
- 職種
- 職種別優先順位
ボタンを押すと1年分のデータが作成されますが、このレイアウトだと365日分のデータが作成されたかどうか一目でわかりません。そのため新たに表形式レイアウトを作成して確認します
表レイアウト
スクリプト実行
自動作成スクリプトボタンを押すと
右側にデータが作成されているが、すべてのデータが作成されているかどうかわからない
表レイアウトに切り替えると365日分の全データが作成されているのが確認できました