WordPress自動見積プラグイン「Calculated Fields Form」で自動見積を作成する際、複数の条件による計算はどのようにしたらよいのだろうか。
このような疑問の参考となるよう、サンプルを使って計算式の一例を解説します。
Calculated Fields Form (英語)
当ブログでは、Calculated Fields Formを3つの記事で詳しく解説しています。
- 基本設定
- 計算式の詳細解説 ⇒ この記事
- メールフォーム、決済機能等(有料版の機能)
Calculated Fields(計算用フィールド)について
Calculated Fields(計算用フィールド)についてです。(「Calculated Fields Formの使い方①」と一部重複します)
①②のボタンでField名や計算に使う記号を、③(数式エディター)に入力します。(直接入力も可能です。)
Operators(図1の②)は、Mathematical Operatorsで計算に使う記号を、Logical Operatorsで条件分岐等に使う記号を入力できます。(直接入力もできます)
基本的な計算式について
先の「Calculated Fields(計算用フィールド)」でよく使う、基本的な計算式をご紹介します。
プログラミングやエクセルで使われる四則演算子や論理演算子などが使われています。(全ての記号が使えるわけではないようです)
Mathematical Operatorsで使われる主な記号
- + 足し算(加算)
- – 引き算(減算)
- * 掛け算(乗算)※算数の記号とは異なります。
- / 割り算(除算)
- sum(x、y、z、….) ()内の値の合計
- ceil(x) xを最も近い整数に切り上げます。fieldname1の値が1.4の場合、ceil(fieldname1)= 2
- ceil(x、y) xをyの最も近い倍数に切り上げます。ceil(2.3、0.5)= 2.5
- floor(x) Xを最も近い整数に切り下げます。fieldname1の値が1.6の場合、floor(fieldname1)= 1
- floor(x、y) xの値を、yの最も近い倍数に切り下げます。floor(2.6、0.5)= 2.5
- round(x) xを最も近い整数にします。fieldname1の値が2.5の場合、round(fieldname1)= 3
- round(x、y) xの値を、yの最も近い倍数に切り下げます。round(2.3、0.5)= 2.5
- max(x、y、z、…、n) 最高値の数値を表示。
- fieldname1の値が5で、fieldname2が10の場合、max(fieldname1、fieldname2)=10
- min(x、y、z、…、n) 最小値の数値を表示。
- fieldname1の値が5で、fieldname2が10の場合、min(fieldname1、fieldname2)= 5
他の記号を知りたい方はこちら(英語)
Logical Operatorsで使われる主な記号
IF(AND(論理式1, 論理式2, 論理式3, …),A,B)
論理式1,2,3が全てTRUEだった場合、Aになり、それ以外の場合はBを表示します。
IF(OR(論理式1, 論理式2, 論理式3, …),A,B)
論理式1,2,3が1つでもTRUEだった場合、Aになり、それ以外の場合はBを表示します。
※論理式の数は1つ以上で幾つでもOKです。
※IF関数、OR関数は入れ子にして、複雑な条件分岐に対応できます。
※fieldname*==X
Xの値はCalculated Fields(計算用フィールド)の場合は数値、プルダウンやラジオボタン等の場合はValue値
例:IF(AND(fieldname1==5,fieldname2>1),500,0)
fieldname1(数値:5)、fieldname2(数値:2)の場合→500
fieldname1(数値:5)、fieldname2(数値:1)の場合の場合→0
NOTは、例えば、IF(NOT(fieldname1==5),A,B) で、fieldname1が5ではない場合にA、5の場合にBになります。
JavaScriptコードを入力
数式エディター(図1の③)には、直接JavaScriptコードを入力して複雑な計算ができます。
以下のように入力します。
(関数(){
//ここにあなたのコード
})();
以下は、このプラグインのマニュアルに記載されている例です。
(function(){
if(fieldname3 > 100) return fieldname1+fieldname2;
if(fieldname3 <= 100) return fieldname1*fieldname2;
})();
サンプルを使って計算式を解説
ここでは、「Calculated Fields Formの使い方①」でも使用したサンプル(英会話学校)で解説します。
サイト上の表示
①の3つの条件(コース、部屋の種類、留学期間)の組み合わせで、②の「授業料+寮費」が算出されます。
このページでは、この部分の計算方法について解説します。
※留学費用合計は、「入学金」と「授業料+寮費」から割引額を引いた金額になります。(Calculated Fields Formの使い方①)で解説しており、ここでは解説しません。)
フィールドの設定画面
設定画面右側の「授業料+寮費」をクリックした時の画像。
B「授業料+寮費」は、A(3つのフィールド)の選択内容の組み合わせによって算出されます。
Aの各フィールド名は以下です。
コース:fieldname2、お部屋の種類:fieldname10、留学期間:fieldname9
Cに計算式が入っています。
複数条件による計算式の解説
画像2の「授業料+寮費」の料金表です。
コース:fieldname2、お部屋の種類:fieldname10、留学期間:fieldname9 の3つの要素を組み合わせた結果に料金が表示されるように計算式を入れます。
各項目のvalue値
・コース fieldname2 基礎コース:1、ESLコース:2、TOEICコース:3
・お部屋の種類 個室:1 、複数人部屋 : 2
・期間 1週間:1、2週間:2、3週間:3、4週間:4、 5週間 : 5
IF関数を使った例
例えば、個室、基礎コース、1週間の場合は、70,000円、それ以外の場合FALSE
これをIF関数に当てはめると、
IF(AND(fieldname2==1,fieldname10==1,fieldname9==1),70000,FALSE)・・・①
また、個室、基礎コース、2週間の場合は、115,000円、それ以外の場合FALSE
IF(AND(fieldname2==1,fieldname10==1,fieldname9==2),115000,FALSE)・・・②
①のFALSEに、②を入れ、入れ子にします。
IF(AND(fieldname2==1,fieldname10==1,fieldname9==1),70000,IF(AND(fieldname2==1,fieldname10==1,fieldname9==2),115000,FALSE))
3種類の選択肢の組み合わせは、3×2 ×5=30通りあります。
30通りの組み合わせを入れ子にします。
しかし、30通りを1つ1つ加えていくのは、たいへんですし、実際には、組み合わせの数はもっと多くなることが多いです。
ですので、エクセルとテキストエディタを使って、IF関数の組み合わせで計算式を簡単に作成する方法を次でご紹介します。
IF関数の組み合わせで計算式を作成
1.エクセルを使う
1-A 個室の料金表(表1)を使った作業(エクセル)
Calculated Fields Formの計算式とエクセルの計算式は異なりますが、文字列の連結を行うためにエクセルを使います。
以下の順で作業を行います。
- ①のように、条件式を作成します。①は個室(fieldname10=1)、1週間(fieldname9=1)でコース(fieldname2)が1~3の3種類。
- ②のD12セルに =CONCAT(D8,D4,”,”)という関数を入れます。CONCATは文字列を連結する関数です。
D12セルは、部屋の種類が個室、コースが基礎コース、1週間の料金が70,000円という意味です。 - D12セルを選択して、D14までドラックすると、②のようにIF関数の式が3つ表示されます。
- それから、D8~D14までを選択した状態で、右にH列までドラックすると、H列までIF関数ができます。
- D12~H14の15個のIF関数式を次の手順で使います。
1-B 複数人数部屋の料金表(表1)でも同様の手順で行います。
こちらでも15個のIF関数式ができます。
2.テキストエディタを使って、1本の計算式にする
エクセルの作業が終わったら、今度はサクラエディタなどのテキストエディタを使って以下の順で作業を行います。
エクセルからIF関数をコピー
まず、テキストエディタに、前述の1-Aと1-Bでできた、それぞれ15個、合わせて30個のIF関数をコピーします。
以下はコピーの一部ですが、余白(黄色部分)や改行が多数あるので、テキストエディタの置換で削除します。
・余白は、余白を選択した状態で、置換後を「空白」(なにも入れない)にします。
・改行は正規表現などを使って削除します。
sakuraエディタの場合は「\r\n」⇒「空白」でできます。
1つにつなげると、以下のようになります。
括弧を加える
条件数の分(この場合は30)の括弧(閉じる)を最後に加えます。(画像は式の一部です)
括弧の数は1つでも違っていると動作しません。
3. function(関数)を加える
function(関数)は追加せずに、これまでの手順だけで計算式は動作しますが、特に長い式の場合は、公式サポートによるとfunction、function(関数)を使うのが推奨のようです。
先頭と最後に、下の画像のように計算式全体を挟む形でfunction(関数)を入れます。(赤で囲った部分2箇所)
▼先頭に追加
varの各項目は実際に使っているフィールドに合わせてください。
(function(){
var f10 = fieldname10, f2 = fieldname2, f9 = fieldname9;
return
▼最後に追加
;
})()
さらに、関数のvar f10 = fieldname10, f2 = fieldname2, f9 = fieldname9;
に合わせて、テキストエディタの置換を使って計算式のreturn
以下の要素を以下のように変換します。
・fieldname10 ⇒ f10
・fieldname2 ⇒ f2
・fieldname9 ⇒ f9
作成した計算式を計算フィールドに入れる
最終的にできた実際の計算式が以下です。これを画像2のC(計算用フィールド)に入れます。
(function(){
var f10 = fieldname10, f2 = fieldname2, f9 = fieldname9;
return
IF(AND(f10==1,f2==1,f9==1),70000,IF(AND(f10==1,f2==1,f9==2),115000,IF(AND(f10==1,f2==1,f9==3),160000,IF(AND(f10==1,f2==1,f9==4),195000,IF(AND(f10==1,f2==1,f9==5),243000,IF(AND(f10==1,f2==2,f9==1),75000,IF(AND(f10==1,f2==2,f9==2),125000,IF(AND(f10==1,f2==2,f9==3),175000,IF(AND(f10==1,f2==2,f9==4),215000,IF(AND(f10==1,f2==2,f9==5),268000,IF(AND(f10==1,f2==3,f9==1),85000,IF(AND(f10==1,f2==3,f9==2),150000,IF(AND(f10==1,f2==3,f9==3),205000,IF(AND(f10==1,f2==3,f9==4),240000,IF(AND(f10==1,f2==3,f9==5),300000,IF(AND(f10==2,f2==1,f9==1),55000,IF(AND(f10==2,f2==1,f9==2),95000,IF(AND(f10==2,f2==1,f9==3),131000,IF(AND(f10==2,f2==1,f9==4),160000,IF(AND(f10==2,f2==1,f9==5),200000,IF(AND(f10==2,f2==2,f9==1),60000,IF(AND(f10==2,f2==2,f9==2),105000,IF(AND(f10==2,f2==2,f9==3),146000,IF(AND(f10==2,f2==2,f9==4),180000,IF(AND(f10==2,f2==2,f9==5),225000,IF(AND(f10==2,f2==3,f9==1),65000,IF(AND(f10==2,f2==3,f9==2),104000,IF(AND(f10==2,f2==3,f9==3),149000,IF(AND(f10==2,f2==3,f9==4),190000,IF(AND(f10==2,f2==3,f9==5),237000,))))))))))))))))))))))))))))))
;
})()
計算式が動作するか確認
自動見積を設置したページで、計算式が動作するか確認します。
動かない場合は、どこかに計算式の記述ミスがあるはずなので、探して修正します。
まとめ
以上、Calculated Fields Formの計算式について解説しました。
主要な部分を解説しましたが、他にも機能は数多くあり、使いこなすとかなり便利なプラグインだと思います。
テキストで読んでもなかなかピンとこないかもしれませんが、実際に操作する上で少しでも参考になれば幸いです。
メールフォーム、決済機能等については、こちらの記事をご覧ください。