Skip to content

拡張計算式に無い Excel 関数 ​

第1版作成 最終更新 (日本時間)
確認バージョン1.5.8.1

拡張計算式の関数は、1.5.8.1 では 57 個です(Excel に対応するもの 54 個、独自の $DATETIME・$LOGINUSERID・$LOGINUSERNAME)。このページは、Excel の主な関数と比べて拡張計算式に無い関数を洗い出し、足すとしたらどれから足すかを整理した改修・設計メモです。ここに挙げた関数は本体にはありません。

前提にした現行実装 ​

  • 関数はすべて FormulaServerScriptUtilities.cs の中に JavaScript の文字列として定義され、計算式の前に連結して V8 で評価されます(FormulaServerScriptUtilities.cs#L15-L106)。
  • 関数名は大文字・小文字を問いません(ParseIgnoreCase)。
  • 計算式が参照できるのは、計算しているレコード 1 件の項目(model)と context だけです。

実装済みの関数の一覧と動きは 拡張計算式の実装ロジック を参照してください。

分類ごとの比較 ​

Excel の関数は 500 を超えるので、拡張計算式で使いどころがありそうな 153 個に絞って比べています(独自関数は数に入れていません)。

分類比べた数実装済み無い割合
日付・時刻24131154%
文字列30121840%
論理136746%
数学・三角52133925%
情報・判定1861233%
変換(ASC・JIS・TEXT・VALUE)440100%
検索・参照120120%
合計153549935%

日付・時刻 ​

実装済み: DATE・DATEDIF・DAY・DAYS・HOUR・MINUTE・MONTH・NOW・SECOND・TODAY・YEAR・WEEKDAY・EOMONTH

無い関数内容優先度
EDATE月数を足し引きした日付高
DATEVALUE・TIMEVALUE文字列を日付・時刻に変換中
TIME時刻を作る中
WORKDAY・NETWORKDAYS営業日の加減・営業日数中
WEEKNUM・ISOWEEKNUM・WORKDAY.INTL・DAYS360・YEARFRAC週番号、休日指定の営業日、360 日基準、年の割合低

文字列 ​

実装済み: CONCAT・FIND・LEFT・LEN・LOWER・MID・RIGHT・SUBSTITUTE・TRIM・UPPER・REPLACE・SEARCH

無い関数内容優先度
TEXTJOIN区切り文字でつなぐ高
EXACT・REPT・CHAR・CODE完全一致、繰り返し、文字コードとの変換中
CONCATENATE・T・CLEAN・FIXED・PROPER・NUMBERVALUE・LENB・LEFTB・RIGHTB・MIDB・DOLLAR・YEN・UNICODE・UNICHAR旧式の連結、バイト単位の操作、通貨書式など低

論理 ​

実装済み: AND・IF・NOT・OR・IFS・IFERROR

無い関数内容優先度
SWITCH値で分岐する高
XOR・IFNA排他的論理和、#N/A のときの代替中
TRUE・FALSE・LAMBDA・LET定数、関数・変数の定義低

数学・三角 ​

実装済み: ABS・AVERAGE・MAX・MIN・MOD・ODD・POWER・RAND・ROUND・ROUNDUP・ROUNDDOWN・SQRT・TRUNC

無い関数内容優先度
SUM・COUNT・INT合計、数値の個数、整数への切り捨て高
EVEN・SIGN・CEILING・FLOOR・RANDBETWEEN・COUNTA偶数への切り上げ、符号、倍数への丸め、整数の乱数、空でない個数中
SUMIF・SUMIFS・COUNTIF・COUNTIFS・AVERAGEIF条件付きの集計中(下の制約あり)
三角関数・対数・PI・GCD・LCM・PRODUCT・QUOTIENT・MROUND など低

情報・判定 ​

実装済み: ISBLANK・ISERROR・ISEVEN・ISNUMBER・ISODD・ISTEXT

無い関数内容優先度
ISNA#N/A の判定中
ISLOGICAL・ISNONTEXT・ISERR・ISREF・ISFORMULA・TYPE・N・NA・ERROR.TYPE・SHEET・CELL低

検索・参照 ​

VLOOKUP・HLOOKUP・XLOOKUP・INDEX・MATCH・CHOOSE・INDIRECT・OFFSET・ROW・COLUMN・ROWS・COLUMNS はどれもありません。値を番号で選ぶ CHOOSE だけは、セルの範囲に頼らないので足しやすく、優先度は中です。

最初に足す候補 ​

関数分類実装の難しさ
SUM数学低
COUNT数学低
INT数学低
SWITCH論理中
EDATE日付・時刻中

どれも業務の計算式でよく使われ、今は $IFS や四則演算を組み合わせて書くしかないものです。TEXTJOIN・EXACT・REPT・XOR・SIGN・CHOOSE なども、引数を受け取って値を返すだけなので実装は軽めです。

足すときの実装場所 ​

  1. FormulaServerScriptUtilities.cs に、関数定義の JavaScript を返す Get〜Script() を足す(既存の GetIfScript() などと同じ形)。
  2. Execute で連結している関数定義の列に、その Get〜Script() を加える。
  3. 関数名の大文字・小文字をそろえる ParseIgnoreCase の対象に新しい関数名を加える。

関数定義は計算式の前に連結されるので、計算式側で同じ名前を宣言すると上書きされる点は、既存の関数と同じです。

設計上の制約 ​

拡張計算式は計算しているレコード 1 件だけを見て値を出す設計です。そのため、次の関数は Excel と同じ意味では作れません。

制約影響する関数理由
セル範囲が無いVLOOKUP・HLOOKUP・INDEX・MATCH・OFFSETほかのレコードを参照できない
シート・セル座標が無いSHEET・INDIRECT・ROW・COLUMNプリザンターに対応する概念が無い
複数レコードの集計ができないSUMIF・COUNTIF・AVERAGEIF など集計はサーバースクリプトの items.Sum・items.Count などや API で行う

SUM・COUNT なども、範囲ではなく引数に並べた値(同じレコードの複数の項目)を対象にする関数として作ることになります。

関連ページ ​

変更履歴

第1版サーバースクリプトの仕組み・項目の変更可否・拡張サーバースクリプトの解説と、関連する改修・設計メモを追加