6 返信 最新の回答 日時: Jul 15, 2014 9:40 PM ユーザー:sunnyheights

    チェックボックスを使った計算がうまく出来ません

    sunnyheights

      タイトル

      チェックボックスを使った計算がうまく出来ません

      フォーラムに投稿

           いつもお世話になっております。

            またまた、ごく初歩的な問題でつまづいております。

            

            「商品A」と「商品B」があり、価格がそれぞれ500円と700円とします。

             商品Aをチェックすると500円が請求フィールドに表示され、商品Bにチェックを入れると700円が表示されるようにしました。しかし、商品Aと商品Bの両方にチェックを入れると請求フィールドには1200円が表示されないのです。

             請求金額フィールド=

            Case (

                 商品 = A ; 500 ; 商品 = B ; 700 ;  商品 = A & 商品 = B ; 1200 ; 0)

             という計算式を書きましたが、どちらか一方にチェックが入ると正しく動作するのですが、両方にチェックが入ると、結果は0が表示されます。もちろんどちらもチェックが無い時は0が表示されます。多分 & で結ぶところが間違いなのだろうと思うのですが、and や + などの記号をいろいろ試してもうまく行きません。

            こんな簡単なことで恥ずかしいですが、ご教示賜りますようお願いします。

            

             

        • 1. Re: チェックボックスを使った計算がうまく出来ません
          Shin

               複数をチェックした場合、チェックボックスの内容はそれらの項目を改行で結んだテキストになります。

               例では、A¶B または B¶A になりますので、

               Case ( PatternCount ( 商品 ; "A" ) ; 500 ) + Case ( PatternCount ( 商品 ; "B" ) ; 700 )

               と書くのが一番簡単かも。

               上と同じ様に書くには、

               Case (
                 PatternCount ( 商品 ; "A" ) and PatternCount ( 商品 ; "B" ) ; 1200 ;
                 PatternCount ( 商品 ; "A" ) ; 500 ;
                 PatternCount ( 商品 ; "B" ) ; 700 ;
                 0
               )

               と書けるかな。

          • 2. Re: チェックボックスを使った計算がうまく出来ません
            hiro_

                 商品数が増えても価格が変更されても絶えられるように、

                 1.商品テーブルに「商品」と「価格」フィールドがあるとする。
                 2.チェックボックスの値一覧を作り、その値フィールドに「商品テーブル::価格」を、
                   2番目表示フィールドに「商品テーブル::商品」を、かつ「2番目表示フィールドだけ表示」を設定。
                 3.売上テーブルに「商品」チェックボックスフィールドと「請求」計算フィールドを作り、その計算式は、
                   Evaluate(Substitute(商品フィールド; [¶;"+"]))

            • 3. Re: チェックボックスを使った計算がうまく出来ません
              sunnyheights

                   Shinさん、

                    いつもお世話になります。

                    早速教えていただいた記述を試しているのですが、どうも私の理解が悪くうまく動作しません。

                    例でお示しいただきました「PatterCount」というのはチェックボックスのONのことと理解してよいのですね。

                    それで、お示しの例のように;

                    Case( 

                     ( 商品 ; "A")  and (商品 ; "B" ) ; 1200; 
                     ( 商品 ; "A") ; 500; 
                     ( 商品 ; "B") ; 700; 
                    0
                   )
                    
                    とすると、Syntaxチェックで最初の” ; ”の位置で括弧の数が合わないというエラーになります。
                    
                    仕方が無いので;
                    
                    Case( 
                     ( 商品 = "A")  and (商品 = "B" ) ; 1200; 
                     ( 商品 = "A") ; 500; 
                     ( 商品 = "B") ; 700; 
                    0
                   )
                    
                    という書き方にすると片側どちらかがONの時と、両方OFFの時は正しく動作しますが、両方ONの時はこの質問の前と同様に何も表示されません。
                    
                   何か基本的な知識が不足しているようで、うまく動いておりません。私の記述に何か間違いが有りますでしょうか。今一度お教えください。
                    
                    
                    Hiro.さん、
                    
                    いつもお世話になります。
                    今度もまた高度なテクニックをお教えいただきました。
                    なるほど、テーブルを別途用意するというやり方で、しかもフィールドのEvaluate関数とで状態を判断して、Substitute関数を使って置き換えるやり方ですね。
                    こんなすごいことは全く考えつきませんでした。
                    しかし、今直面しているのは、あまり商品の数が増えるというケースは将来的にもありません。
                    私の質問では商品と書きましたが、ある状態が(両側なし)、(どちらか片側ありで片側無し)、(両側あり)のパターンになります。
                    
                    お教えいただきました手法は、テーブルを準備しなければならない時に利用させていただきたいと思います。
                    
                    ありがとうございました。
                    
              • 4. Re: チェックボックスを使った計算がうまく出来ません
                sunnyheights

                     Shinさん、Hiro.さん、

                      

                      何とダメ元でやった次のSyntaxで問題が解決しました。

                      

                      Case( 

                       ( 商品 = "A")  =  (商品 = "B" ) ; 1200; 
                       ( 商品 = "A" ); 3000; 
                       ( 商品 = "B") ; 4000; 
                      0
                     )
                      
                      非学な私にはなんでこのSyntaxが成立するのかも判りません。
                      and、&、+ が全くダメでまさか = が良いとは理解に苦しんでおります。
                      
                      もし、もっとスマートな記述が有りましたら、引き続きお教えください。
                      
                • 5. Re: チェックボックスを使った計算がうまく出来ません
                  Shin

                       typoでした。申し訳有りません。

                       Case (
                         PatternCount ( 商品 ; "A" ) and PatternCount ( 商品 ; "B" ) ; 1200 ;
                         PatternCount ( 商品 ; "A" ) ; 500 ;
                         PatternCount ( 商品 ; "B" ) ; 700 ;
                         0
                       )

                  • 6. Re: チェックボックスを使った計算がうまく出来ません
                    sunnyheights

                         Shinさん、

                          

                          PatterCountはTypoでしたか。

                          Patterという単語はカレンダーをめくる時の表現などで使うので、これが正しいものと思って記述したらエラーが帰って来たので、前記のように書きました。PatternCountという関数があるとは存じませんでした。

                          改めてPatternCountでSyntaxを書いたところ見事に動作しました。

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

                          いや、実は先に前後を=でつなぐ構文を作ったところ動作したのですが、一度FMPを閉じて、再度開けたら、もう動作しなくて、どうしようと悩んでいたところでした。本当にGood Timingでご訂正をいただき助かりました。

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