SpreadJS製品ヘルプ
数式内のセル参照
関数リファレンス > 数式の概要 > 数式内のセル参照

数式では、定数値またはセル参照を参照できます。 参照先のいずれかのセル内の値が変更されると、数式の結果も変わります。 セル参照ではなく、定数値を数式に使用した場合は、この数式(または数式内の値)を明示的に修正しないかぎり、数式の結果が変更することはありません。

Spread.Sheetsを使用すると、formulaToRanges()メソッドによって指定したセル範囲を数式文字列に変換できます。たとえば、行番号と列番号からセルA1のアドレスを取得できます。

詳細については、「セル参照のサンプルコード」を参照してください。

数式に指定したセル範囲の直前または直後に新規行を追加した場合、この新規行は数式のセル範囲には含まれません。

以下のトピックでは、それぞれの表記形式と参照の種類について説明します。

A1(アルファベット、行番号)形式

各セルは、合計2,147,483,648の行と列に対し、列を表すアルファベット(A~Z、以降はAA~ZZ、AAA~ZZZなど)と行番号(1~)の組み合わせで参照できます。たとえばD50というセル参照は、D列50行目のセルを表します。セル範囲を参照するには、まずセル範囲の左上隅のセル参照を入力し、次にコロン(:)、最後にセル範囲の右下隅のセル参照を入力します。

R1C1(行番号、列番号)形式

各セルは、「R」の文字の後に行番号、「C」の文字の後に列番号を指定して参照できます。 たとえばR1C3というセル参照は、第1行と第3列で指定されるセルを表します。

A1セル参照スタイル R1C1セル参照スタイル 説明
B12 R12C2 2列目(列B)および12行目(行12)のセル
D14:D48 R14C4:R48C4 14行目から48行目、および4列目(列D)のセル範囲
E16:H16 R16C5:R16C8 16行目(行16)、および5列目から8列目(列E~H)のセル範囲
A25:E70 R25C1:R70C5 最初の5列(A~E列)、および25行目から70行目のセル範囲

相対参照と絶対参照

相対セル参照は、数式セルに対する相対位置で他のセルを指定する形式です。 絶対セル参照は、常にシート上の正確な位置によってセルを参照する形式であり、現在のセル位置とは比較されません。

相対参照をコピーすると、コピー先の参照位置は自動的に調整されますが、絶対参照をコピーしても、参照先は調整されません。ウィジェットでは、絶対セル参照と相対セル参照のどちらも使用できます。各シートのセル参照スタイルを定義するには、ReferenceStyleプロパティを使用します。絶対参照と相対参照の両方を含むセル範囲参照は、数式ではサポートされません。つまり、セル範囲内の開始位置と終了位置の参照スタイルが一致する必要があります(両方が絶対参照、または両方が相対参照)。次の表は、数式内で有効となる相対セル参照の例を示します。

関数 説明
SUM(A1:A10) 1列目の1行から10行までのセル値を合計
PI( )*C6 円周率(π)にC6セルの値を乗算
(A1 + B1) * C1 最初の2つのセル内の値を加算し、その結果に3番目のセル値を乗算
IF(A1>5, A1*2, A1*3) A1セルの値が5より大きいかどうかを調べ、大きければA1セル値に2を乗算。そうでなければA1セル値に3を乗算

A1表記形式では、絶対参照を示す場合、行または列(または両方)番号の前にドル記号($)を付けます。 次に、例を示します。

$A$1 絶対的な第1列、絶対的な第1行
$A1 絶対的な第1列、相対的に1つ先の行
A$1 相対的に1つ先の列、絶対的な第1行
A1 相対的に1つ先の列、相対的に1つ先の行

R1C1表記形式では、相対参照を示す場合、行または列(または両方)番号を[ ]で囲みます。 次に、例を示します。

R1C1 絶対的な第1行、絶対的な第1列
R1C[1] 絶対的な第1行、相対的に1つ先の列
R[1]C1 相対的に1つ先の行、絶対的な第1列
R[1]C[1] 相対的に1つ先の行、相対的に1つ先の列
R[-1]C[-1] 相対的に1つ前の行、相対的に1つ前の列

R1C1表記形式では、[ ]内の番号は、現在のセルからの相対的な距離を意味します。 この番号は正または負の整数、またはゼロ(0)によって指定します。相対距離の値を省略すると、相対距離0の意味となります。したがって、以下の式が成り立ちます。

RC2 = R[0]C2

R[3]C = R[3]C[0]

動的参照

SpreadJS は、計算関連の関数を使用する際に最小限のメモリ使用量と優れたパフォーマンスをサポートする dynamicReferences フラグを提供します。 このフラグを使用すると、ワークシート全体で関数を使用した計算プロセスが高速になります。

dynamicReferences フラグはブール値で設定し、CalcEngine の動的参照モードを有効または無効にします。 IF、CHOOSE、SUMIF、SUMIFS、AVERAGEIF、AVERAGEIFS、MAXIFS、MINIFS、COUNTIFS、VLOOKUP、HLOOKUP などの関数のパフォーマンスを向上させるのに役立ちます。

デフォルトでは、dynamicReferences フラグの値は true です。 計算のパフォーマンスを向上させるには、フラグを false に設定する必要があります。

メモ: 数式の設定、または fromJSON()メソッドを実行する前に、dynamicReferences フラグを設定する必要があります。

次のサンプルコードは、dynamicReferences オプションが false または true に設定されている場合に、循環参照がどのように影響を受けるかを示します。

Javascript
コードのコピー
spread.options.dynamicReferences = false;
spread.options.iterativeCalculation = false;
sheet.setFormula(0, 1, '=SUMIF(A:A,"a*",B:B)');
sheet.setValue(1, 0, "aaa");
sheet.setValue(1, 1, 123); // 数式 B1 には A:A、B:B のリスナーがある、循環参照であり、 iterativeCalculation は false であるため、B1 の結果は変更しません。

spread.options.dynamicReferences = true;
spread.options.iterativeCalculation = false;
sheet.setFormula(0, 1, '=SUMIF(A:A,"a*",B:B)');
sheet.setValue(1, 0, "aaa");
sheet.setValue(1, 1, 123); // この場合は、数式 B1 の結果は変更します。
関連トピック