12 返信 最新の回答 日時: Jul 30, 2014 3:40 PM ユーザー:sunnyheights

    予算年度の上半期や下半期の表現方法を教えて下さい

    sunnyheights

      タイトル

      予算年度の上半期や下半期の表現方法を教えて下さい

      フォーラムに投稿

           たびたびの質問で恐縮ですが、私の書いた式で思わぬ結果に悩んでいます。

           お助け願います。

            

            請求日フィールドに年、月、日が入っています。

            半年に一度の請求の場合、平成26年度上半期分とか下半期分という表現が必要です。

            FMPのカレンダー形式にある平成26年上半期とか平成26年下半期というやり方を見つけました。

            ところが、これはカレンダーの上半期、下半期で、日本の4月から9月までを上半期、10月から翌3月までを下半期という会計年度表現には不適当です。

            

            そこで、次の式を書きましたが、上半期と下半期が逆に表示されたり、2月と3月が逆ではなく正しく表示されたりと、全く不思議な動きをしています。

            

            何処が悪いのか、どうすれば良いのかお教えください。

            請求日フィールド(日付)

            上/下半期フィールド =

            Case (

             PatternCount (Month ( 請求日 ) ; "4" or "5" or "6 " or "7" or "8" or "9" ) ; YearName ( 請求日 ; 0 ) & "年度" & "上半期" ;
             PatternCount (Month ( 請求日 ) ; "1" or "2" or "3" or "10" or "11" or "12") ; YearName ( 請求日 ; 0 ) & "年度"  &  "下半期"  
           )
            
            例: 請求日フィールド(2014/07/27)
            欲しい答え: 上/下半期フィールド (平成26年度上半期)
            
            月の羅列をorで取るのも間が抜けていると思います。不等号2個で間を表現しようとしたのですが、うまく行きません。
            
            なにとぞよろしくお願いします。

        • 1. Re: 予算年度の上半期や下半期の表現方法を教えて下さい
          hiro_

               あまりシンプルな式例でないけど、

               Let([
                #請求日=請求日フィールド;
                #前日数=Date(1;1;Year(#請求日)+1)-Date(4;1;Year(#請求日));
                #後日数=Date(1;1;Year(#請求日)+1)-Date(10;1;Year(#請求日)); //修正 9→10
                #年補正=Min(Year(#請求日+#前日数)=Year(#請求日); Year(#請求日+#後日数)=Year(#請求日));
                #期補正=Sum(Year(#請求日+#前日数)=Year(#請求日); Year(#請求日+#後日数)=Year(#請求日))
               ];
                SerialIncrement(YearName(#請求日; 0)&"年度"; 0-#年補正) & Choose(#期補正;"下半期";"上半期";"下半期")
               )

          • 2. Re: 予算年度の上半期や下半期の表現方法を教えて下さい
            sunnyheights

                 Hiro.さん、

                  ご回答誠にありがとうございました。

                  あ、これはすごいやり方ですね。

                  Let関数というのは使い方がイマイチわからず敬遠していましたが、こんな具合に使うのですね。

                  またDate関数もこういう使い方をするのも、目からウロコです。

                  1、2、3月は年の補正が必用なことも、すっかり忘れていました。

                  #後日数=Date(1;1;Year(#請求日)+1)-Date(9;1;Year(#請求日));

             の部分ですが、このままだと9月が下半期になってしまうので、

             #後日数=Date(1;1;Year(#請求日)+1)-Date(10;1;Year(#請求日)); に書き換えて、無事に動いています。

             SerialIncrementやChooseなども一度は使ってみたかったのですが、これで使い方が分かりました。

              

                  いや、FMPは奥が深いですね。もっともっと勉強しなければならないこと痛感しました。

                  ありがとうございました。

            • 3. Re: 予算年度の上半期や下半期の表現方法を教えて下さい
              sunnyheights

                   あ、書き忘れましたが、ファイルメーカー社が、カレンダーの形式設定で選べるようにしてくれるとありがたいですね。

                   日本では4月から学校や予算年度が始まりますが、アメリカやカナダでは10月が期初です。アメリカでは予算関係ではQ1というのは10月から12月までですから、1年プラスしたQ1という表現になります。こんな機能をつけてくれれば使い勝手が良くなると思いました。 >>>ファイルメーカーさん、よろしくお願いします。

              • 4. Re: 予算年度の上半期や下半期の表現方法を教えて下さい
                sunnyheights

                     続けての質問で恐縮ですが、やっと下半期、上半期が正しく表示されるようになって、欣喜雀躍といったところですが、書式に一部問題があります。

                     この平成nn年上半期やnn年下半期は請求書の前書きに使いたく、そこでは他の表記などと合わせて、全角数字を使用したいのです。

                      つまり平成28年度上半期では無くて平成28年度上半期と書きたいのです。

                      Hiro.さんに教えていただいた;

                        SerialIncrement(YearName(#請求日; 0)&"年度"; 0-#年補正) & Choose(#期補正;"下半期";"上半期";"下半期")

                  のYearNameの前にRomanZenkaku(YearName(#請求日);0)としてみたのですが、数字はRomanでは無いようで、変化がありません。

                  NumeralZenkakuのような関数を探したのですが見つかりません。

                  斯くなる上は、計算フィールドである「請求期」フィールドの書式を変えようとしましたが、ここは計算フィールドの所為か、選ぶことが出来ません。

                 こんな些細なことで質問は恥ずかしいのですが、なんとか宜しくお願いします。

                • 5. Re: 予算年度の上半期や下半期の表現方法を教えて下さい
                  hiro_

                       半角数字部分の全角変換は、多少力業ですがシンプルに、

                       Let([
                        #請求日=請求日フィールド;
                        #前日数=Date(1;1;Year(#請求日)+1)-Date(4;1;Year(#請求日));
                        #後日数=Date(1;1;Year(#請求日)+1)-Date(10;1;Year(#請求日));
                        #年補正=Min(Year(#請求日+#前日数)=Year(#請求日);Year(#請求日+#後日数)=Year(#請求日));
                        #期補正=Sum(Year(#請求日+#前日数)=Year(#請求日);Year(#請求日+#後日数)=Year(#請求日));
                        #年号=Substitute(YearName(#請求日; 0); [0;"0"];[1;"1"];[2;"2"];[3;"3"];[4;"4"];[5;"5"];[6;"6"];[7;"7"];[8;"8"];[9;"9"])
                       ];
                        SerialIncrement(#年号&"年度"; 0-#年補正) & Choose(#期補正;"下半期";"上半期";"下半期")
                       )

                  • 6. Re: 予算年度の上半期や下半期の表現方法を教えて下さい
                    sunnyheights

                         Hiro.さん、

                          

                          今度もまた適確な方法をご教示いただきました。

                          なるほど、Substitute関数を使って、半角数字を全角数字に置き換えるやり方ですね。

                          うーん、なるほど。こんなテクニックは全く思いつきませんでした。

                          結果はばっちりです。

                          本当にありがとうございました。

                    • 7. Re: 予算年度の上半期や下半期の表現方法を教えて下さい
                      Shin

                           Let (
                            d = 日付 + 275 ;
                            YearName ( Date ( 1 ; 1 ; Year ( d ) - 1 ) ; 0 ) & Case ( Div ( Month ( d ) - 1 ; 6 ) ; "年度下半期" ; "年度上半期" )
                           )

                           だとシンプルになりますよ。

                      • 8. Re: 予算年度の上半期や下半期の表現方法を教えて下さい
                        sunnyheights

                             Shin さん、

                              

                              あ、これは又華麗な方法をご教示いただきましたね。

                              なるほど、こちらはずいぶんとシンプルになりました。

                              Hiro.さんのやりかたもそうだと理解しているのですが、結局請求日に275日加算するところがミソなのですね。

                              素人の私にはこの数字のマジックが分かりませんでしたが、要は9ヶ月目を境にして上、下を振り分けて、年を補正しているのですね。

                              こんなところがすんなりと思いつく皆様方には全く脱帽です。

                              まだまだ精進します。これからもよろしくお願いします。

                              ありがとうございました。

                        • 9. Re: 予算年度の上半期や下半期の表現方法を教えて下さい
                          Shin

                               考え方は全く違いますよ。

                               4/1や3/31、9/30、10/1などの日付に275を加えてみるとどうなっていますか。ちょっと試してみてください。

                          • 10. Re: 予算年度の上半期や下半期の表現方法を教えて下さい
                            sunnyheights

                                 Shinさん、

                                  

                                  ヒントをいただきました。ありがとうございます。

                                  なるほど、275日を足すことで、3/31なら当年12/1となり、4/1なら翌年1/1になりますね。9/30に275日加算なら翌年7/2、10/1なら翌年7/3ですね。いずれも7月ということですが、これからひと月を引いて、つまり一番大きなときの6月を6で割って整数を求めるので、1なら下半期、0なら上半期とするという技ですね。

                                  何れにしても、これは私には全く考えつかない方法です。

                                  本当にありがとうございました。

                            • 11. Re: 予算年度の上半期や下半期の表現方法を教えて下さい
                              Shin

                                   日付の計算誤差を忘れていました。次の式で。

                                   Let (
                                    d = 日付 + 275 ;
                                    RomanZenkaku ( YearName ( Date ( 1 ; 1 ; Year ( d ) - 1 ) ; 0 ) )
                                    & Case ( Div ( Mod ( Month ( 日付 ) + 8 ; 12 ) ; 6 ) ; "年度下半期" ; "年度上半期" )
                                   )

                              • 12. Re: 予算年度の上半期や下半期の表現方法を教えて下さい
                                sunnyheights

                                     Shinさん、

                                      

                                      三たびのご指導誠にありがとうございます。

                                      私が以前試して、どうしても数字部分が半角年号になっていた部分が、同じ関数のRomanZenkakuで、きっちり表現されたのにはびっくりです。

                                      さらにCase文のなかのMonth(日付)+ 8 をやってModで除数12の余りを求め、それを6で割るの修正も加えていただきました。今試してうまく動作することを確認しました。

                                      ありがとうございました。