自動計算の設問種別で使用できる変数、関数、演算子のヘルプです。
自動計算フィールドを使うと、入力された点数の合計・平均・ランク判定などをシステムが自動で計算してくれます。このページでは、その計算式の書き方を説明します。
Googleスプレッドシートとの互換性について:自動計算フィールドの計算式はGoogleスプレッドシートの構文・関数仕様に完全に準拠しています。このヘルプに記載のない細かい挙動については、Googleスプレッドシートの動作を基準としてご確認ください。
すべての計算式は = で始めます。
=SUM({score1}, {score2}, {score3})同じフォーム内のフィールド:
{フィールドキー}前フェーズのフォームのフィールド:
{フォームタイプ.フィールドキー}従業員属性:
{employee.属性名}
例:
={score}
={first.total_score}
={employee.hire_date}整数:
0,1,100,-5小数:
3.14,0.5,-2.718
注意:・先頭に
+は付けられません(5は可、+5は不可)・カンマ区切りは使えません(1000は可、1,000は不可)
例:
={score} * 1.5
={total} + 100
=ROUND({average}, 2)ダブルクォート " で囲みます。
=IF({score}>=80, "合格", "不合格")
=IF({grade}="A", 100, 0)
="値: ""{特殊な値}""" → 値: "特殊な値"TRUE または FALSE を使用します(大文字小文字は区別しません)。
=IF(TRUE, "常に表示", "表示されない")
=NOT(FALSE)
=AND(TRUE, {isActive})ISO 8601形式(YYYY-MM-DD)のダブルクォート文字列、またはDATE関数を使用します。
=DATEDIF("2024-04-01", TODAY(), "M")
=DATEDIF(DATE(2024, 4, 1), TODAY(), "M")サポートしない形式:
"04/01/2024"(ロケール依存)"2024/04/01"(スラッシュ区切り)"April 1, 2024"(英語表記)
演算子 | 説明 | 例 |
|---|---|---|
+ | 加算 | {a} + {b} |
- | 減算 | {a} - {b} |
* | 乗算 | {a} * {b} |
/ | 除算 | {a} / {b} |
% | パーセント | 50%(= 0.5) |
^ | べき乗 | {a} ^ 2 |
剰余(余り)は MOD() 関数を使用します。
演算子 | 説明 | 例 |
|---|---|---|
= | 等しい | {a} = {b} |
<> | 等しくない | {a} <> {b} |
< | より小さい | {a} < {b} |
<= | 以下 | {a} <= {b} |
> | より大きい | {a} > {b} |
>= | 以上 | {a} >= {b} |
注意:
&&、||、and、orなどの論理演算子は使用できません。論理結合にはAND()/OR()関数を使用してください。
^(べき乗)*、/、%(乗算・除算・パーセント)+、-(加算・減算)=、<>、<、<=、>、>=(比較)
括弧 () を使用して優先順位を明示できます。
=({a} + {b}) * {c} → aとbを足してからcを掛ける
={a} + {b} * {c} → bとcを掛けてからaを足す複数の数値の合計を返します。
構文: SUM(値1, 値2, ...)
=SUM({field1}, {field2}, {field3})
=SUM(10, 20, 30) → 60複数の数値の算術平均を返します。
構文: AVERAGE(値1, 値2, ...)
=AVERAGE({score1}, {score2})
=AVERAGE(80, 90, 70) → 80複数の数値のうち最小値を返します。
構文: MIN(値1, 値2, ...)
=MIN({評価1}, {評価2}, {評価3})
=MIN(5, 2, 8) → 2複数の数値のうち最大値を返します。
構文: MAX(値1, 値2, ...)
=MAX({評価1}, {評価2}, {評価3})
=MAX(5, 2, 8) → 8複数の数値の中央値を返します。
構文: MEDIAN(値1, 値2, ...)
=MEDIAN({評価1}, {評価2}, {評価3})
=MEDIAN(1, 2, 3, 4, 5) → 3
=MEDIAN(1, 2, 3, 4) → 2.5複数の数値の標本標準偏差を返します。
構文: STDEV(値1, 値2, ...)(引数は2つ以上必要)
=STDEV({評価1}, {評価2}, {評価3})数値が入力されている引数の数を返します。
構文: COUNT(値1, 値2, ...)
=COUNT({評価1}, {評価2}, {評価3})空でない値の引数の数を返します。
構文: COUNTA(値1, 値2, ...)
=COUNTA({評価1}, {評価2}, {評価3})これらの関数は主にキャリブレーションルールで配列を引数に取る場合に使用します。
条件を満たす値の合計を返します。
構文: SUMIF(範囲, 条件, [合計範囲])
範囲: 条件で評価する配列
条件: 評価条件(文字列または数値)
合計範囲(省略可): 合計する配列。省略時は範囲を使用
=SUMIF([first.rank], "S", [first.raiseAmount]) → ランクがSの対象者の昇給金額合計条件を満たす値の平均を返します。
構文: AVERAGEIF(範囲, 条件, [平均範囲])
範囲: 条件で評価する配列
条件: 評価条件(文字列または数値)
平均範囲(省略可): 平均する配列。省略時は範囲を使用
=AVERAGEIF([first.rank], "A", [first.score]) → ランクがAの対象者のスコア平均条件を満たす値の数を返します。
構文: COUNTIF(範囲, 条件)
範囲: カウントする配列
条件: カウント条件(文字列または数値)
=COUNTIF([first.rank], "S") → ランクがSの対象者の数指定した値が配列内でどの位置にあるかをパーセンタイル順位で返します。
構文: PERCENTRANK(範囲, 値)
範囲: パーセンタイル順位を計算する配列
値: 順位を調べる数値
戻り値: 0から1の間の数値(0が最小、1が最大)
=PERCENTRANK([first.performanceScore], {first.performanceScore}) → 対象者のスコアがグループ内で何パーセンタイルか指定した値が配列内で何位になるかを返します(1から始まる順位)。
構文: RANK(値, 範囲, [順序])
値: 順位を調べる数値
範囲: 順位を計算する配列
順序(省略可): 0または省略で降順(大きい方が1位)、0以外で昇順(小さい方が1位)
=RANK({first.score}, [first.score]) → 降順(スコアが高い方が1位)
=RANK({first.score}, [first.score], 1) → 昇順(スコアが低い方が1位)指定した桁数で四捨五入を行います。
構文: ROUND(数値, 桁数)
桁数は省略時0(整数に丸める)。負の値で整数部分を丸めます。
=ROUND(3.456, 2) → 3.46
=ROUND(3.456) → 3
=ROUND(1234, -2) → 1200指定した桁数で切り上げを行います(0から離れる方向)。
構文: ROUNDUP(数値, 桁数)
=ROUNDUP(3.141, 2) → 3.15
=ROUNDUP(-3.141, 2) → -3.15指定した桁数で切り捨てを行います(0に近づく方向)。
構文: ROUNDDOWN(数値, 桁数)
=ROUNDDOWN(3.789, 2) → 3.78
=ROUNDDOWN(-3.789, 2) → -3.78数値の絶対値を返します。
構文: ABS(数値)
=ABS(-5) → 5
=ABS(3) → 3除算の余り(剰余)を返します。結果の符号は除数と同じになります。
構文: MOD(被除数, 除数)
=MOD(10, 3) → 1
=MOD(10, -3) → -2
=MOD(-10, 3) → 2条件に基づいて異なる値を返します。
構文: IF(条件, 真の場合の値, [偽の場合の値])
偽の場合の値は省略時FALSEを返します。
=IF({score}>=80, "合格", "不合格")
=IF({評価}>3, {評価}*1.1, {評価})
=IF({isComplete}, "完了")複数の条件を順番に評価し、最初にTRUEとなった条件に対応する値を返します。
構文: IFS(条件1, 値1, [条件2, 値2, ...])
どの条件もTRUEでない場合は #N/A エラー。デフォルト値を設定する場合は最後の条件に TRUE を指定します。
=IFS({score}>=90, "S", {score}>=80, "A", {score}>=70, "B", {score}>=60, "C", TRUE, "D")
=IFS({評価}==5, "最優秀", {評価}==4, "優秀", {評価}==3, "良好", TRUE, "要改善")論理値を反転します。
構文: NOT(論理値)
=NOT(TRUE) → FALSE
=NOT({score}<50) → スコアが50以上ならTRUEすべての引数がTRUEの場合にTRUEを返します。
構文: AND(論理値1, 論理値2, ...)
=IF(AND({score1}>=60, {score2}>=60), "両方合格", "再試験")いずれかの引数がTRUEの場合にTRUEを返します。
構文: OR(論理値1, 論理値2, ...)
=IF(OR({score1}>=80, {score2}>=80), "優秀", "標準")式の値に一致するケースを検索し、対応する値を返します。
構文: SWITCH(式, ケース1, 値1, [ケース2, 値2, ...], [デフォルト値])
引数の総数が奇数の場合、最後の引数がデフォルト値となります。
=SWITCH({grade}, "S", 100, "A", 80, "B", 60, 0)
=SWITCH({評価}, 5, "最優秀", 4, "優秀", 3, "良好", "要改善")値が未入力(空)の場合にTRUEを返します。
構文: ISBLANK(値)
空文字(
"")はFALSEを返します数値の0やFALSEも空ではないためFALSEを返します
=ISBLANK({comment}) → commentが未入力ならTRUE
=IF(ISBLANK({score}), "未評価", {score}) → スコアが未入力なら"未評価"、入力済みならスコアを返す値が数値の場合にTRUEを返します。
構文: ISNUMBER(値)
文字列として記述された数値(例: "100")はFALSEを返します。
=ISNUMBER({score}) → scoreが数値ならTRUE
=IF(ISNUMBER({評価}), {評価} * 10, 0) → 評価が数値なら10倍、それ以外は0値がテキスト(文字列)の場合にTRUEを返します。
構文: ISTEXT(値)
空文字("")もテキストとしてTRUEを返します。
=ISTEXT({comment}) → commentがテキストならTRUE
=IF(ISTEXT({grade}), SWITCH({grade}, "S", 100, "A", 80, 0), {grade})値が論理値(TRUE/FALSE)の場合にTRUEを返します。
構文: ISLOGICAL(値)
数値の0や1はFALSEを返します(論理値ではないため)。
=ISLOGICAL({isActive}) → isActiveが論理値ならTRUE
=IF(ISLOGICAL({flag}), {flag}, FALSE)複数の文字列を連結して返します。
構文: CONCATENATE(文字列1, [文字列2, ...])
数値や真偽値は自動的に文字列に変換されます。
=CONCATENATE("結果: ", {score}) → "結果: 85"
=CONCATENATE({lastName}, " ", {firstName}) → "田中 太郎"
=CONCATENATE("評価: ", {rating}, "点") → "評価: 4.5点"現在の日付を返します。
構文: TODAY() 戻り値: ISO 8601形式("YYYY-MM-DD")
=TODAY() → "2025-01-16"年・月・日から日付を作成します。
構文: DATE(年, 月, 日)
=DATE(2024, 4, 1) → "2024-04-01"2つの日付間の差を指定した単位で返します。
構文: DATEDIF(開始日, 終了日, 単位)
開始日が終了日より後の場合は #NUM! エラーとなります。
単位 | 説明 |
|---|---|
"Y" | 満年数 |
"M" | 満月数 |
"D" | 日数 |
"YM" | 年を除いた満月数(0〜11) |
"YD" | 年を除いた日数(0〜365) |
"MD" | 年と月を除いた日数(0〜30) |
=DATEDIF({employee.hire_date}, TODAY(), "Y") → 勤続満年数
=DATEDIF({employee.hire_date}, TODAY(), "M") → 勤続満月数
=DATEDIF("2023-04-15", "2025-12-19", "Y") → 2日付から年を抽出します。
構文: YEAR(日付)
=YEAR({employee.hire_date}) → 2020日付から月を抽出します。戻り値: 1〜12
構文: MONTH(日付)
=MONTH(TODAY()) → 1日付から日を抽出します。戻り値: 1〜31
構文: DAY(日付)
=DAY({employee.hire_date}) → 152つの日付間の日数を返します。
構文: DAYS(終了日, 開始日)
=DAYS(TODAY(), {employee.hire_date}) → 入社からの経過日数フィールドタイプ | 値 | 未入力時の扱い |
|---|---|---|
数値入力 | 入力された数値 | 0 |
文字列入力 | 入力された文字列 | 空文字 |
テキストエリア | 入力された文字列 | 空文字 |
プルダウン | 選択されたオプションの値 | 空値 |
ラジオボタン | 選択されたオプションの値 | 空値 |
自動計算 | 計算結果(数値・文字列・真偽値) | - |
参照できないフィールドタイプ: ファイルアップロード、目標連携、後ろに配置された自動計算フィールド(循環参照防止のため)
同じフォーム内:
={score}
={field1} + {field2}前フェーズのフォーム:
={first.total_score}
={second.rating}自動計算フィールドは、同一フォーム内で前に配置された別の自動計算フィールドの結果を参照できます。これにより、複雑な計算を段階的に分割して実装できます。
例(フィールド配置順):
1. score1(数値入力)
2. score2(数値入力)
3. subtotal(自動計算): =SUM({score1}, {score2})
4. bonus(自動計算): ={subtotal} * 0.1
5. total(自動計算): ={subtotal} + {bonus}注意事項:・参照する自動計算フィールドは、参照元より前に配置されている必要があります・循環参照(A→B→A)は許可されません・計算結果がエラー値(
#DIV/0!、#VALUE!など)の場合、そのまま参照先に伝播します
評価対象の従業員に紐づく属性を {employee.属性名} の形式で参照できます。
重要: フェーズ設定で等級・報酬を非開示に設定していても、これらの属性は計算式から参照できます。取り扱いに十分ご注意ください。
参照構文 | 説明 | 型 |
|---|---|---|
{employee.hire_date} | 入社日 | 日付 |
=DATEDIF({employee.hire_date}, TODAY(), "Y") → 勤続年数参照構文 | 説明 | 型 |
|---|---|---|
{employee.job_key} | 職種のキー | 文字列 |
{employee.job_category_key} | 職種分類のキー | 文字列 |
従業員に職種が未設定の場合、参照結果は空値として扱われます。
=SWITCH({employee.job_key}, "engineer", 1.2, "designer", 1.1, "sales", 1.0, 1.0)
=IF({employee.job_category_key} = "management", {score} + 10, {score})参照構文 | 説明 | 型 |
|---|---|---|
{employee.grade_key} | 現在の等級のキー | 文字列 |
{employee.grade_group_key} | 等級体系のキー | 文字列 |
=SWITCH({employee.grade_key}, "M1", 1.2, "M2", 1.1, "S1", 1.0, "S2", 0.9, 1.0)
=IF({employee.grade_group_key} = "management", {score} + 10, {score})参照構文 | 説明 | 型 |
|---|---|---|
{employee.supplemental_metric.<metric_key>} | 補足指標の値 | 数値/文字列 |
={employee.supplemental_metric.sublevel}
=IF({employee.supplemental_metric.sublevel} >= 3, 1.1, 1.0)参照構文 | 説明 | 型 |
|---|---|---|
{employee.compensation.<metric_key>} | 報酬指標の金額/数量/テキスト | 数値/文字列 |
{employee.compensation.<metric_key>.currency} | 報酬指標の通貨コード | 文字列 |
{employee.compensation.<metric_key>.unit} | 報酬指標の単位 | 文字列 |
={employee.compensation.base_salary} → 現在の基本給
={new_base_salary} - {employee.compensation.base_salary} → 昇給額
={employee.compensation.base_salary} * 12 + {employee.compensation.bonus} → 年収参照構文 | 説明 | 型 |
|---|---|---|
{employee.salary_band.base_salary_min} | 給与テーブルの基本給下限 | 数値 |
{employee.salary_band.base_salary_max} | 給与テーブルの基本給上限 | 数値 |
={employee.salary_band.base_salary_min}
=({employee.salary_band.base_salary_min} + {employee.salary_band.base_salary_max}) / 2 → 中央値
=IF(AND({employee.compensation.base_salary} >= {employee.salary_band.base_salary_min}, {employee.compensation.base_salary} <= {employee.salary_band.base_salary_max}), "レンジ内", "レンジ外")計算式の入力を支援するため、関数とフィールド参照のオートコンプリート(サジェスト)機能があります。
英字(A-Z)を入力すると、入力中の文字列にマッチする関数の候補がカテゴリ別に表示されます。
数値集計関数: SUM、AVERAGE、MIN、MAX、MEDIAN、STDEV、COUNT、COUNTA
条件付き集計関数: SUMIF、AVERAGEIF、COUNTIF、PERCENTRANK、RANK(キャリブレーション用)
端数処理関数: ROUND、ROUNDUP、ROUNDDOWN、ABS、MOD
論理関数: IF、IFS、NOT、AND、OR、SWITCH
情報関数: ISBLANK、ISNUMBER、ISTEXT、ISLOGICAL
文字列関数: CONCATENATE
日付関数: TODAY、DATE、DATEDIF、YEAR、MONTH、DAY、DAYS
関数を選択すると関数名と括弧(())が挿入され、カーソルは括弧内に移動します。
{ を入力すると、参照可能なフィールドの候補が表示されます。自動計算フィールドより前に配置されたフィールドのみが対象です。フィールドを選択するとフィールドキーと閉じ括弧(})が挿入されます。
{employee. を入力すると、参照可能な従業員属性の候補がカテゴリ別に表示されます。
操作 | 動作 |
|---|---|
↑/↓ キー | 候補間を移動 |
Enter/Tab キー | 選択中の候補を確定 |
Esc キー | サジェストを閉じる |
クリック | 候補を確定 |
# スコアの合計
=SUM({score1}, {score2}, {score3})
# スコアの平均
=AVERAGE({score1}, {score2}, {score3})
# スコアの平均を小数第1位で四捨五入
=ROUND(AVERAGE({score1}, {score2}, {score3}), 1)
# 加重平均
=({score1} * 0.3 + {score2} * 0.5 + {score3} * 0.2)# 80点以上なら"合格"、未満なら"不合格"
=IF({score}>=80, "合格", "不合格")
# スコアに応じたランク付け
=IFS({score}>=90, "S", {score}>=80, "A", {score}>=70, "B", {score}>=60, "C", TRUE, "D")
# 等級に応じた係数
=SWITCH({employee.grade_key}, "M1", 1.2, "M2", 1.1, "S1", 1.0, "S2", 0.9, 1.0)# 勤続満年数
=DATEDIF({employee.hire_date}, TODAY(), "Y")
# 勤続年月を文字列で表示
=CONCATENATE(DATEDIF({employee.hire_date}, TODAY(), "Y"), "年", DATEDIF({employee.hire_date}, TODAY(), "YM"), "ヶ月")
# 勤続3年以上なら評価に補正
=IF(DATEDIF({employee.hire_date}, TODAY(), "Y") >= 3, {score} * 1.1, {score})# 昇給額
={new_base_salary} - {employee.compensation.base_salary}
# 昇給率(パーセント)
=({new_base_salary} / {employee.compensation.base_salary} - 1) * 100
# 年収の計算
={employee.compensation.base_salary} * 12 + {employee.compensation.bonus}
# 給与レンジの中央値
=({employee.salary_band.base_salary_min} + {employee.salary_band.base_salary_max}) / 2
# コンパレシオ(給与レンジ内での位置)
=({employee.compensation.base_salary} - {employee.salary_band.base_salary_min}) / ({employee.salary_band.base_salary_max} - {employee.salary_band.base_salary_min}) * 100# 等級と勤続年数を組み合わせた評価係数
=IF(AND({employee.grade_group_key} = "management", DATEDIF({employee.hire_date}, TODAY(), "Y") >= 5), 1.3, 1.0)
# 前フェーズのスコアを参照した最終スコア
=ROUND(({first.total_score} * 0.3 + {second.total_score} * 0.7), 1)
# 結果の文字列表示
=CONCATENATE({employee.grade_key}, " (", {score}, "点): ", IF({score}>=80, "合格", "不合格"))計算式の評価中にエラーが発生した場合、以下のエラー値が表示されます。
エラー値 | 発生条件 | 例 |
|---|---|---|
#DIV/0! | ゼロ除算 | =1/0 |
#VALUE! | 引数の型が不正 | ="text"+1 |
#REF! | 存在しないフィールドを参照 | ={存在しないフィールド} |
#NAME? | 未サポートの関数名 | =UNKNOWN() |
#ERROR! | 構文が無効 | =SUM( |
#NUM! | 数値が有効範囲外、またはDATEDIFで開始日が終了日より後 | オーバーフロー |
#N/A | 一致する値が見つからない | =IFS(FALSE, "a") |
文脈 | 扱い |
|---|---|
算術演算 | 0として扱う |
文字列連結 | 空文字として扱う |
比較演算 | 0または空文字として扱う |
集計関数 | 無視する(カウントしない) |
論理関数 | FALSEとして扱う |
情報関数 | 関数に応じて判定する(例: |
未入力フィールドを明示的に判定する場合は、ISBLANK 関数を使用するか、比較演算子で空文字 "" または 0 と比較してください。
有効数字は15桁が上限です。浮動小数点演算の誤差は計算エンジンが自動的に除去するため、例えば 0.1 + 0.2 は 0.3 として正しく扱われます。ただし15桁を超える数値は精度が保証されません。表示時に ROUND 等で端数処理することを推奨します。
フォームが確定済みの場合、自動計算フィールドの値は確定時点でデータベースに保存された値がそのまま表示されます。確定後に従業員情報(等級・報酬など)が変更されても、確定済みフォーム内の計算結果は変更されません。評価確定時点での計算結果が正確に保持されます。
自動計算フィールドは、同じフォーム内で前に配置されたフィールドのみ参照できます。循環参照(A→B→A)は許可されません。