8 返信 最新の回答 日時: Jul 22, 2017 7:55 PM ユーザー:ask

    24時を超える時刻データのインポート

    ask

      初めまして。

      給与計算にFileMakerを利用しています。

      EXCELで作成した勤務データをFileMakerに取り込むのですが、

      24時を超える夜勤のものを取り込むとデータが変わってしまします。

      例えば、PM22時からAM3時の勤務をExcel上で【開始22:00 終了27:00】としていますが、

      インポートすると【開始22:00 終了3:00】となり勤務時間がマイナスになってしまいます。

      どうしたらこの問題が解決するでしょうか?

       

      Excelでの24時以降の表示形式は[h]:mmとしています。

      Excel2010とFileMakerPro12を利用しています。

       

      よろしくお願いします。

        • 1. Re: 24時を超える時刻データのインポート
          YukioTakaoka

          askさん、

           

          ひとつの参考ですが・・・

          FileMaker Pro 側の終了時刻のフィールドをテキストフィールドにして、取り込んでみると、Excelで「27:00」と入力されていた値が、「1900/01/01 3:00」という具合にインポートされてくることが分かります。

           

          このデータを日付部分と時刻部分に分割し、日付部分から、さらに日を取り出します。

          たとえば、「1900/01/01 3:00」であれば「1」です。

          この「1」は24時間以降の時に追加する1日の値になりますので、日が「1」であれば、24時間と言うことになります。

           

          この24時間を3時間に加えると、27時間という値を作り出すことができると思います。

           

          ご参考になれば幸いです。

          • 2. Re: 24時を超える時刻データのインポート
            ask

            ご回答ありがとうございます。

            実はまだFileMaker初心者で...

             

            『テキストフィールドにして、取り込んでみる』はできたのですが、それ以降が分かりません。初心者向けに教えていただけると嬉しいです。

             

            ちなみに、27:00は「1900/01/01 3:00」ではなく「1899/12/31 5:00」という形で取り込まれました。

             

            ご協力いただけると幸いです。

            • 3. Re: 24時を超える時刻データのインポート
              YukioTakaoka

              なるほど、私の手元のファイルと違う結果になりますね。

              Excelのバージョンによって変わるのでしょうか・・・ それはさておき。

               

              ちょっと手法を変えました。

              Excelかデータを取り込んだ時に、出勤時刻と退勤時刻を比較して、「出勤時刻 > 退勤時刻」の関係だった場合に、退勤時刻に24時間を足すという、見た目分かりやすい処理を退勤時刻の入力値の自動化オプションに設定してみました。

              もっと良い方法もあるかと思いますが、見た目の分かりやすさを優先しました。

               

              入力値の自動化オプションの設定の際には「フィールドに既存の値が存在する場合は置き換えない」チェックボックスはオフにしてくだい。

               

              また、24時間を単純に足すというのは、とても限定的な方法なのですが、勤務時間が48時間を超えるような場合も想定すると、退勤時の日付をデータとして持たせて、勤務時間を計算する方が確実とおもいます。

               

              ご参考になれば幸いです。

               

              スクリーンショット_2017-07-13_20_36_59.png

              • 4. Re: 24時を超える時刻データのインポート
                ask

                たびたびすみません。

                 

                なるぼど~!!と思い、見よう見まねで試してみたのですが、エラーが出てしまいます。

                もしかして、ほかに設定されている条件なども関係しているのでしょうか?

                スクリーンショットで頂いている計算でも、他にも少しずつ変えて試してみても同じエラーが出ます。

                手取り足取りのような状況ですみません...キャプチャ.JPG

                • 5. Re: 24時を超える時刻データのインポート
                  YukioTakaoka

                  大きく別けて、Case関数を使用した計算式が3つあるようですね。

                  最初の顧客IDに関するCase関数は入れ子になって1つの計算式を成しています。その後ろに今回追加した計算式が独立して続いています。

                  このように独立したCase関数の条件判断式が2つ連なっているために、エラーになっています。

                  どの様のこををしたいのかを踏まえて工夫が必要と思います。

                   

                   

                  また、このように2つの異なる判断をする様な計算式を記述する場合には、工夫が必要と思います。

                  そもそも顧客IDが「115」の時の終了時刻に関して、なにやら処理をしている様ですが、終了時刻に入ってくる値の前提などの様な値なのでしょうか?

                  • 6. Re: 24時を超える時刻データのインポート
                    ask

                    遅くなってしまいました。

                     

                    上の2つの関数は既に私が使い始めたころから設定されており、そこまででは問題なく動いています。

                    顧客IDに関しては、「115」という値を「有給」と登録しているため、開始・終了時間が共に0:00になるように設定されています。

                     

                    もうひとつの関数がよくわからないんです…

                    数字を3つ入力すると 915 →   9:15

                       4つ入力すると 1145  →  11:45

                       4つより多く入力すると…?? 23:30 → 23:30

                    ということで合っていますか??

                     

                    この設定をされた方が既に退職されていてわからないんです…

                    • 7. Re: 24時を超える時刻データのインポート
                      YukioTakaoka

                      なるほど。「115」の件はわかりました。

                       

                      それと、時刻の入力が3桁または4桁、あるいはそれ以上の文字列という前提なのですね。

                      なるほど。

                       

                      さて、計算式の中に「Middle ( 終了時刻;3;2 )」と言う部分がありますが、

                      「23:30」と入力されてくると「23::3」になると思います。

                      「23:30」と入力されたら「23:30」にしたい場合は、「Middle ( 終了時刻;4;2 )」とする必要があります。

                       

                      Case(

                       PatternCount ( 終了時刻 ; ":" ) =0 and Length ( 終了時刻 )=3;Replace ( 終了時刻;2;0;":" );

                       PatternCount ( 終了時刻 ; ":" ) =0 and Length ( 終了時刻 )=4;Replace ( 終了時刻;3;0;":" );

                       Length ( 終了時刻 )>4;Left (終了時刻; 2 )&":"&Middle ( 終了時刻;4;2 );

                       終了時刻

                      )

                       

                      御参考になれば幸いです。

                      • 8. Re: 24時を超える時刻データのインポート
                        ask

                        確かに!!

                        「23:30」と入力すると「23::3」となってしまいますね!

                        試しに「23:30」と入力すると「?」となるのでなんでだろうと思っていましたが納得です!

                         

                        ここまでは以前から設定されていたもので、私の入社前から問題なく使えているようです。

                        (やはり最後の「Length ( 終了時刻 )>4;…」の部分が何を意図しているのか私にはわかりませんが…)

                         

                        なんとかして、一番初めに教えていただいた

                              Case(

                               Self<終了時間;Time(Hour(Self)+24;Minute(Self);0);

                               Self

                                )

                        が利用できる方法はないものでしょうか?(><)

                         

                        私は「Case(PatternCount ( 終了時刻 ; ":" ) =0 and Length ( 終了時刻 )=3…」この関数を全部消してしまったら良いんじゃないかと思います。

                        たぶん「23時30分」を入力したい時に「2330」と入力していたものを「23:30」と入力するだけになるんじゃないか、そうなるとExcelと一緒なので特に面倒でもないんじゃないかと思うんです。

                        しかし!!会社で長年使われているものなので私が変更するのは気が引けるし、何か不具合が生じたらと考えると言い出せません。

                         

                        両方の関数を使うにはどうしたらいいのでしょうか?(><)