ReoGrid ReoGrid Web

数式エンジン

ReoGrid Web は Excel 互換の数式エンジンを内蔵しています。数学・統計・三角関数・論理・文字列・日付/時刻・検索・情報・条件付き集計・乱数の 10 カテゴリで合計 109 個の組み込み関数を備え、AST パーサー、評価器、依存関係グラフによるリアルタイム再計算を行います。

Lite 版は算術演算子(+-*/^&)、比較演算子、セル参照のみ対応。109 個の組み込み関数はすべて Pro 版で利用可能です。

Live Demo

基本的な使い方

セル値が = で始まると数式として解釈されます。

const ws = grid.worksheet

// 算術演算
ws.cell('C1').value = '=A1+B1'
ws.cell('C2').value = '=A2*B2'

// 関数呼び出し
ws.cell('C3').value = '=SUM(A1:A10)'
ws.cell('C4').value = '=IF(A1>100,"High","Low")'
ws.cell('C5').value = '=VLOOKUP("Apple", A1:B100, 2, FALSE)'

セル参照

形式説明
相対参照行・列のインデックスが変動A1, B2
絶対参照$ で固定$A$1, A$1, $A1
範囲参照コロンで範囲指定A1:B10

スマート数式エディター

数式(= 始まりのセル)を編集中、エディターは Excel 風の参照編集モードを有効化します。

  • 他のセルをクリックすると、そのセル番地がキャレット位置に挿入されます。ドラッグで A1:B5 のような範囲に拡張可能。
  • 別のセルを再クリックすると、直前に挿入した参照を再ターゲットします(point モード)。文字入力や矢印キーで point モードを解除。
  • 色分け参照。 式中のユニークな参照ごとに共通パレットから色が割り当てられ、グリッド上の参照範囲も同色の点線矩形で囲まれます。結合セルを含む参照は結合領域全体を囲うように展開されます。

API 呼び出しは不要 — 数式編集時に自動で有効になります。


組み込み関数一覧

10 カテゴリ・109 関数すべてを掲載します。

数学・算術(22)

関数構文説明
SUMSUM(値1, 値2, ...)合計
PRODUCTPRODUCT(値1, 値2, ...)
AVERAGEAVERAGE(値1, 値2, ...)平均
COUNTCOUNT(値1, 値2, ...)数値の個数
COUNTACOUNTA(値1, 値2, ...)空でないセルの個数
COUNTBLANKCOUNTBLANK(範囲)空白セルの個数
MAXMAX(値1, 値2, ...)最大値
MINMIN(値1, 値2, ...)最小値
ROUNDROUND(数値, 桁数)四捨五入
ROUNDUPROUNDUP(数値, 桁数)切り上げ
ROUNDDOWNROUNDDOWN(数値, 桁数)切り捨て
ABSABS(数値)絶対値
MODMOD(数値, 除数)剰余
INTINT(数値)小数部切り捨て(負方向)
TRUNCTRUNC(数値, [桁数])小数部切り捨て(ゼロ方向)
CEILINGCEILING(数値, 基準値)基準値の倍数に切り上げ
FLOORFLOOR(数値, 基準値)基準値の倍数に切り捨て
MROUNDMROUND(数値, 倍数)指定倍数に四捨五入
POWERPOWER(底, 指数)べき乗
SQRTSQRT(数値)平方根
SIGNSIGN(数値)符号(1 / 0 / -1)
SUMPRODUCTSUMPRODUCT(配列1, [配列2, ...])配列要素ごとの積和

統計(4)

関数構文説明
MEDIANMEDIAN(値1, ...)中央値
LARGELARGE(範囲, k)k 番目に大きい値
SMALLSMALL(範囲, k)k 番目に小さい値
RANKRANK(値, 範囲, [order])順位(order=0 で降順)

三角関数・対数(12)

関数構文説明
EXPEXP(数値)e の指数
LNLN(数値)自然対数
LOGLOG(数値, [底])対数(底のデフォルトは 10)
LOG10LOG10(数値)常用対数
SINSIN(数値)正弦(ラジアン)
COSCOS(数値)余弦(ラジアン)
TANTAN(数値)正接(ラジアン)
ASINASIN(数値)逆正弦
ACOSACOS(数値)逆余弦
ATANATAN(数値)逆正接
ATAN2ATAN2(x, y)引数順は Excel 互換
PIPI()円周率

乱数(2)

関数構文説明
RANDRAND()[0, 1) の一様乱数
RANDBETWEENRANDBETWEEN(下限, 上限)整数の一様乱数

現状 RAND / RANDBETWEEN は volatile 扱いではないため、再計算ごとに自動更新はされません。値を更新するにはセルを再入力してください。

論理(8)

関数構文説明
IFIF(条件, 真の場合, [偽の場合])条件分岐
IFSIFS(条件1, 結果1, ...)多分岐(Excel 2019+)
IFERRORIFERROR(値, エラー時の値)エラー捕捉
IFNAIFNA(値, #N/A の代替)#N/A のみ捕捉
ANDAND(条件1, ...)論理積(短絡評価)
OROR(条件1, ...)論理和(短絡評価)
NOTNOT(条件)論理否定
SWITCHSWITCH(式, 値1, 結果1, ..., [既定値])値マッチで分岐

文字列(21)

関数構文説明
LENLEN(文字列)文字数
LEFTLEFT(文字列, [n])左から n 文字
RIGHTRIGHT(文字列, [n])右から n 文字
MIDMID(文字列, 開始, 長さ)部分文字列
UPPERUPPER(文字列)大文字化
LOWERLOWER(文字列)小文字化
PROPERPROPER(文字列)単語先頭を大文字化
TRIMTRIM(文字列)空白圧縮
CONCATENATECONCATENATE(文字列1, ...)連結(範囲は不可)
CONCATCONCAT(値1, ...)連結(範囲も展開)
TEXTJOINTEXTJOIN(区切り, 空文字無視, 値1, ...)区切り付き連結
TEXTTEXT(値, 書式)数値を書式付き文字列に
VALUEVALUE(文字列)文字列を数値に
FINDFIND(検索, 対象, [開始])大小区別あり、ワイルドカード不可
SEARCHSEARCH(検索, 対象, [開始])大小区別なし、ワイルドカード対応
EXACTEXACT(文字列1, 文字列2)大小区別ありの厳密比較
SUBSTITUTESUBSTITUTE(対象, 旧, 新, [出現位置])文字列置換
REPLACEREPLACE(対象, 開始, 文字数, 新)位置指定置換
REPTREPT(文字列, 回数)反復
CHARCHAR(コード)コードポイント → 文字
CODECODE(文字列)先頭文字のコードポイント

日付・時刻(14)

関数構文説明
TODAYTODAY()今日のシリアル値(整数)
NOWNOW()現在日時のシリアル値
DATEDATE(年, 月, 日)日付シリアル生成
YEARYEAR(シリアル)
MONTHMONTH(シリアル)月(1-12)
DAYDAY(シリアル)日(1-31)
HOURHOUR(シリアル)時(0-23)
MINUTEMINUTE(シリアル)分(0-59)
SECONDSECOND(シリアル)秒(0-59)
WEEKDAYWEEKDAY(シリアル, [type])曜日(type 1-3, 11-17 対応)
EDATEEDATE(開始日, 月数)月加算(月末はクランプ)
EOMONTHEOMONTH(開始日, 月数)n ヶ月後の月末日
DAYSDAYS(終了日, 開始日)日数差
DATEDIFDATEDIF(開始, 終了, 単位)期間計算(単位: D/M/Y/MD/YM/YD)

検索・参照(11)

関数構文説明
VLOOKUPVLOOKUP(検索値, 表, 列番号, [近似一致])縦方向の表検索
HLOOKUPHLOOKUP(検索値, 表, 行番号, [近似一致])横方向の表検索
XLOOKUPXLOOKUP(検索値, 検索範囲, 戻り範囲, [既定], [match_mode], [search_mode])モダン検索
INDEXINDEX(範囲, 行, [列])位置指定で値取得
MATCHMATCH(検索値, 範囲, [match_type])値の位置を返す
XMATCHXMATCH(検索値, 範囲, [match_mode], [search_mode])モダン MATCH
ROWROW([参照])行番号
COLUMNCOLUMN([参照])列番号
ROWSROWS(範囲)範囲の行数
COLUMNSCOLUMNS(範囲)範囲の列数
ADDRESSADDRESS(行, 列, [abs], [a1], [シート名])A1/R1C1 文字列を生成

制約: ROW(A5) のような単一セル参照は現状非対応(#VALUE! を返します)。引数なし ROW() / COLUMN() と範囲引数 ROW(A1:A10) は動作します。

未対応(見送り中): INDIRECT / OFFSET。依存グラフに volatile セル機構が必要なため、別タスクで対応予定。

情報・エラー判定(9)

関数構文説明
ISBLANKISBLANK(値)空セル判定
ISNUMBERISNUMBER(値)数値判定
ISTEXTISTEXT(値)文字列判定
ISLOGICALISLOGICAL(値)真偽値判定
ISERRORISERROR(値)エラー判定(#N/A 含む)
ISERRISERR(値)#N/A 以外のエラー判定
ISNAISNA(値)#N/A 判定
NANA()#N/A を返す
ERROR.TYPEERROR.TYPE(値)エラー種別を数値で返す(1-8)

条件付き集計 — *IF / *IFS(6)

関数構文説明
SUMIFSUMIF(範囲, 条件, [合計範囲])単一条件の合計
COUNTIFCOUNTIF(範囲, 条件)単一条件のカウント
AVERAGEIFAVERAGEIF(範囲, 条件, [平均範囲])単一条件の平均
SUMIFSSUMIFS(合計範囲, 範囲1, 条件1, ...)複数条件の合計
COUNTIFSCOUNTIFS(範囲1, 条件1, ...)複数条件のカウント
AVERAGEIFSAVERAGEIFS(平均範囲, 範囲1, 条件1, ...)複数条件の平均

条件(criteria)の構文

SUMIF / COUNTIF / AVERAGEIF 系および *IFS で使える条件式:

意味
5値が 5 と等しい
"apple"文字列が apple(大小区別なし)
">5"5 より大きい
">=10"10 以上
"<>0"0 ではない
"a*"a で始まる文字列
"?at"任意の 1 文字 + at

依存関係の自動追跡

数式間の依存関係は自動的に追跡されます。あるセルの値が変更されると、そのセルを参照しているすべての数式が自動的に再計算されます。

ws.cell('A1').value = '10'
ws.cell('B1').value = '20'
ws.cell('C1').value = '=A1+B1'  // -> 30

// A1 を変更すると C1 が自動再計算
ws.cell('A1').value = '50'      // C1 -> 70

データの一括変更後に数式の依存関係を再構築できます。

ws.rebuildFormulas()

使用例:VLOOKUP を使った請求書

const ws = grid.worksheet

// 価格表(A1:B4)
ws.cell('A1').value = '品名'; ws.cell('B1').value = '単価'
ws.cell('A2').value = 'ウィジェット';  ws.cell('B2').value = '500'
ws.cell('A3').value = 'ガジェット';    ws.cell('B3').value = '1200'
ws.cell('A4').value = 'スプロケット';  ws.cell('B4').value = '350'

// 明細行(D1:G4)
ws.cell('D1').value = '品名'; ws.cell('E1').value = '数量'
ws.cell('F1').value = '単価'; ws.cell('G1').value = '金額'

ws.cell('D2').value = 'ウィジェット'
ws.cell('E2').value = '10'
ws.cell('F2').value = '=VLOOKUP(D2,$A$2:$B$4,2,FALSE)'  // -> 500
ws.cell('G2').value = '=E2*F2'                          // -> 5000

// 合計
ws.cell('G5').value = '=SUM(G2:G4)'
ws.cell('G6').value = '=ROUND(G5*0.1,0)'  // 消費税 10%
ws.cell('G7').value = '=G5+G6'            // 合計

エディション比較

機能Lite (無料)Pro (有料)
算術・比較演算子対応対応
セル参照・範囲参照対応対応
依存関係グラフ対応対応
スマート数式エディター(色分け参照)対応対応
組み込み関数(109 個)対応
ニュースレター

開発の最新情報をお届けします

新しいリリース・機能追加・お知らせをいち早く受け取るには、
メーリングリストにご登録ください。