AFormsはv2.1から、単価や数量に計算式を使えるようになりました。
計算式を書いておくとフォーム内で計算が行われ、その場で単価や数量を変えられます。
この記事では計算式の使い方を説明します。
AForms v2.2.0の情報です。
計算式を書ける場所
計算式は次の場所に書けます。
- 自動項目の「単価」
- 調整項目の「単価」
調整項目は、自動項目とほとんど同じですが、割引や割増(合計金額に対する割合の計算)で使うための部品です。 - 自動数量項目の「数量」
自動数量項目は、数量項目やスライダーで入力された数量を使って、別の数量を計算するための部品です。
単価を計算したい場合は自動項目を、数量を計算したい場合は自動数量項目を使うと良いです。
計算式で変数を使う
計算式には変数を使えます。
計算式の中に英語で変数っぽい単語を書くと、それは変数と解釈され、その変数と実際の数値を関連付けることができるようになります。
変数と関連付けられる数値は次の通りです。
- 数量項目やスライダーで入力された数値
- 自動数量項目の計算結果
- 見積の小計(税別の合計)
計算式の中では、変数をいくつでも何回でも使えます。
計算式の書き方(文法)
計算式には、数値、変数、演算子、関数の適用を書けます。カッコも使えます。
いくつか例を挙げます:
100.5
— ただの数値も式です-100 * (50 + 2)
— 四則演算やカッコが使えます。*
は掛け算です2 * X + 10
— 変数を使えます-
(1 + z) + 2 * (3 / a + z)
—a
とz
は変数です。z
は2回使われています。/
は割り算です -
(1+z)+2* (3/ a+z)
— 空白があったりなかったりしても大丈夫 -
ABS(-10.15256)
— 関数を使えます。ABS
は絶対値を求める関数です "a"
— 「”」で囲ってラベルを使えます。ラベルが付与されていれば1、付与されてなければ0になります"a, b"
— 複数のラベル"a, !b"
— ラベルの否定も使えます。これは「aかつ、bでない」を表します
注意点として、計算式に単項マイナスを書くことはできません。いくつか例を挙げます:
-
-1
— OK。これはただの数値 -
-X
— NG。変数Xの前に単項マイナスがあります -
3 * -(1 + 2)
— NG。カッコの前に単項マイナスがあります -
3 * -1 * (1 + 2)
— これはOK。上の式はこのように書き直せます 3 - (1 + 2)
— これもOK。このマイナスは単項マイナスではありません
変数で使える文字
連続する半角英数が変数と解釈されます。ただし、変数の最初の文字に数字を使うことはできません。
英語の大文字と小文字は区別されません。
いくつか例を挙げます:
-
X
— 変数です -
x
— 上と同じ変数です -
abc
— 連続していれば1文字じゃなくてもOK -
ABc
— 上と同じ変数です -
x1
— 2文字目以降なら数字を使ってもOK -
1x
— 1文字目に数字を使うのはNG
使える演算子と関数
次の演算子と関数が使えます。Excelに似せてあります。
AFormsの数式に論理値(真偽値)はありません。論理値の代わりに1と0を使います。
a + b | 足し算。1 + 2 → 3 |
a - b | 引き算。3 - 1 → 2 |
a * b | 掛け算。2 * 3 → 6 |
a / b | 割り算。5 / 2 → 2.5 |
a ^ b | べき乗。2 ^ 3 → 8 |
a = b | イコール。10 = 10 → 1 10 = 9 → 0 |
a <> b | イコールでない。10 <> 10 → 0 10 <> 9 → 1 |
a > b | 大なり。10 > 9 → 1 10 > 10 → 0 |
a < b | 小なり。9 < 10 → 1 10 < 10 → 0 |
a >= b | 大なりイコール。10 >= 9 → 1 10 >= 10 → 1 |
a <= b | 小なりイコール。9 <= 10 → 1 10 <= 10 → 1 |
IF(a, b, c) | 条件分岐。 aが0でないならb、0ならc。 IF(1, 2, 3) → 2 IF(0, 2, 3) → 3 |
AND(a, b, ...) | 論理積(かつ)。パラメーターは1~255個受け付けます。 すべてのパラメーターが0でないなら1。いずれかのパラメーターが0なら0。 AND(2, 3) → 1 AND(0, 2) → 0 |
OR(a, b, ...) | 論理和(または)。パラメーターは1~255個受け付けます。 いずれかのパラメーターが0でないなら1。すべてのパラメーターが0なら0。 OR(0, 2) → 1 OR(0, 0) → 0 |
XOR(a, b, ...) | 排他的論理和。パラメーターは1~255個受け付けます。 パラメーターのうち0でないものが奇数個あるなら1。そうでないなら0。 XOR(0, 2) → 1 XOR(2, 2) → 0 XOR(0, 2, 2) → 0 |
NOT(a) | 否定。NOT(2) → 0 NOT(0) → 1 |
IFERROR(a, b) | エラーからの復帰。 aがエラーでなければa、エラーならb。 IFERROR(1 + 1, 3) → 2 IFERROR(1 / 0, 3) → 3 |
ROUND(a, b) | bで指定されるケタでaを四捨五入。 b=0なら1の位、b=-1なら10の位、b=1なら小数第1位 ROUND(41.82, 0) → 42 ROUND(41.82, 1) → 41.8 |
ROUNDUP(a, b) | bで指定されるケタでaを切り上げ(±無限大の方向)。ROUNDUP(41.82, 0) → 42 ROUNDUP(41.82, 1) → 41.9 |
ROUNDDOWN(a, b) | bで指定されるケタでaを切り捨て(ゼロの方向)。ROUNDDOWN(41.82, 0) → 41 ROUNDDOWN(41.82, 1) → 41.8 |
TRUNC(a, b) | bで指定されるケタでaの端数を切り捨てます(ゼロの方向)。TRUNC(41.82, 1) → 41.8 TRUNC(-41.82, 1) → -41.8 bを省略した場合は、b=0と仮定されます。 TRUNC(41.82) → 41 |
INT(a) | 端数を切り捨てます(マイナス無限大の方向)。INT(41.82) → 41 INT(-41.82) → -42 |
ABS(a) | 絶対値。ABS(2) → 2 ABS(-2) → 2 |
SIGN(a) | 符号。SIGN(2) → 1 SIGN(-2) → -1 SIGN(0) → 0 |
QUOTIENT(a, b) | a÷bの整数部。QUOTIENT(7, 2) → 3 QUOTIENT(10.5, 5) → 2 |
MOD(a, b) | a÷bの余り。MOD(7, 2) → 1 MOD(10.5, 5) → 0.5 |
MIN(a, b, ...) | 最小値。パラメーターは1~255個を受け付けられます。MIN(1, 5) → 1 MIN(1, 5, -1) → -1 |
MAX(a, b, ...) | 最大値。パラメーターは1~255個を受け付けられます。MAX(1, 5) → 5 MAX(1, 5, 10) → 10 |
SWITCH(a, m1, e1, ...) | 条件分岐。aに続けて、条件mと式eからなる分岐の対を複数指定してください。計算結果は、aと一致するmと対になっているeです。SWITCH(0, 0, 10, 1, 11) → 10 SWITCH(1, 0, 10, 1, 11) → 11 どの分岐にも一致しない場合はエラーになります。 SWITCH(2, 0, 10, 1, 11) → エラー 一番最後のパラメーターとして「どの分岐にも一致しない場合の式」を指定することもできます。 SWITCH(2, 0, 10, 1, 11, 100) → 100 SWITCH(0, 0, 10, 1, 11, 100) → 10 パラメーターの最大数は255ですので、分岐を126個まで作れます。 |
ご注意
計算でエラーが出たらどうなるか
計算でエラーが出た場合、関連する明細行は見積から除外されます。
たとえば、自動項目の金額の欄に1 / 0
と書いたら、0で割り算をするので計算がエラーになります。そして、本来見積に入るはずだった自動項目の明細行は、見積から除外されます。
なお、フォームのプレビューでは、計算でエラーが出るとアラートが出るようになっています。
プレビューでない本番では、計算でエラーが出ても画面上では何も起こりません。ただし、フォームを送信するとエラーでアラートが表示されます。
計算の限界
計算式が使えるようになったことで、AFormsが大きな数値を扱う場面は増えていくと思います。
AFormsがどれくらい大きな数値を扱えるのかは、ソフトが動作する環境の影響を受けます。
著者が調べた限りでは、だいたい12ケタ(兆の位)を越えたあたりで動作に問題が出てくるようです。
AFormsは、式の計算中に出た問題には対処しますが、それ以外の場所で出た問題には気づかないことがあります。その場合、正しくない数値が表示されることがあります。
だいたい12ケタ(兆の位)、これを越えないように注意してフォームを作るようご注意ください。