数式を操作する
このトピックでは、Open XML SDK CellFormula クラスと、Open XML ファイル形式 SpreadsheetML スキーマとの関係について説明します。 SpreadsheetML ドキュメントを構成するパーツと要素の全体構造の詳細については、「SpreadsheetML ドキュメントの構造 (Open XML SDK)」をご覧ください。
SpreadsheetML の数式
式を使用して計算モデルを作成できます。 式は、スプレッドシートの内部または外部のデータ、またはスプレッドシート内の他の計算セルの出力に基づく、値の自動計算に対応しています。
式は、ワークシート XML ファイルの、式を使用する各セルの内部に格納されます。 数式テキストを定義するには、 CellFormula
(<f/>
>) 要素を使用します。
式では、広範な定義済みの関数を含む数式を使用できます。
CellValue
(<v/>
>) 要素は、数式が最後に計算された時刻に基づいてキャッシュされた数式値を格納します。 これにより、式の値の計算をスプレッドシートが開かれるときまで延期でき、ワークシートを開くときの時間を短縮できます。 ユーザーは値を指定する必要はなく、値を省略すると、ワークシートが開かれるときに、Open XML リーダーが、式の定義に基づいて値を計算します。
CellValue
クラスの詳細については、「CellValue」を参照してください。
ISO/IEC 29500 仕様の次の情報では、cellFormula
(<f/>
>) 要素について説明します。
SpreadsheetML の式は、一連の計算の構文的表現であり、スプレッドシート アプリケーションによって関数として解釈されて、ゼロ個以上の入力に基づいて値または値の配列を計算します。
式は定数、演算子、セル参照、関数呼び出し、および名前を含むことができます。
Example
: PI()*(A2^2) という数式を考えてみましょう。 この式は次のようになります。
- PI() は関数 PI の呼び出しになり、π の値が返ります。 - セル参照 A2 は、そのセル内の値を返します。 - 2 は数値定数です。 - キャレット (^) 演算子は、左オペランドを右オペランドの累乗に上げます。 - かっこ ( と ) は、グループ化に使用されます。 - アスタリスク (*) 演算子は、2 つのオペランドの乗算を実行します。
演算子は、1 つ以上のオペランドに対して実行する演算の種類を指定する記号です。 算術演算子、比較演算子、テキスト演算子、参照演算子があります。
ワークシート内の水平のセルの各セットは行であり、垂直のセルの各セットは列です。 セルの行と列の組み合わせで、そのセルの位置を指定します。
セル参照では、同じワークシート上の 1 つ以上のセルを指定します。 参照を使用すると、1 つの数式で同じワークシートのさまざまな部分に含まれるデータを使用できます。 - 複数の数式で 1 つのセルの値を使用します。 - 同じブック内の他のシートのセル、さらには他のブックを参照します。 (他のブック内のセルへの参照はリンクと呼ばれます)。
関数は名前の付いた式であり、0 個以上の引数を受け取り、演算を実行し、必要に応じて結果を返します。 関数呼び出しの例としては、PI()、POWER(A1,B3)、SUM(C6:C10) などがあります。
この Office Open XML 仕様では、300 以上の関数があらかじめ定義されています。 ユーザー定義の関数も使用できます。
名前は、定数、セル参照、または式のエイリアスです。 式で名前を使用すると、その式の目的がわかりやすくなります。 たとえば、式 SUM(FirstQuarterSales) の方が、SUM(C20:C30) より簡単に識別できます。
各式には型があります。 SpreadsheetML の式では、配列、エラー、論理、数値、およびテキストの各型がサポートされています。
配列値または配列定数は、1 つ以上の要素のコレクションを表し、その値はどのような型でもかまいません (つまり、配列の要素はすべての同じ型である必要はありません)。
© ISO/IEC 29500: 2016
式の構文の詳細については、ISO/IEC 29500 の仕様を参照してください。
SpreadsheetML の例
次の例では、Sheet1 のセル A6 に 1 つの式 SUM 関数が含まれるファイルの XML を示します。 ワークシートを定義している次の XML は、"sheet1.xml" ファイルに含まれます。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="https://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="https://schemas.microsoft.com/office/spreadsheetml/2009/9/ac">
<dimension ref="A1:A6"/>
<sheetViews>
<sheetView tabSelected="1" workbookViewId="0">
<selection activeCell="A7" sqref="A7"/>
</sheetView>
</sheetViews>
<sheetFormatPr defaultRowHeight="15" x14ac:dyDescent="0.25"/>
<sheetData>
<row r="1" spans="1:1" x14ac:dyDescent="0.25">
<c r="A1">
<v>1</v>
</c>
</row>
<row r="2" spans="1:1" x14ac:dyDescent="0.25">
<c r="A2">
<v>2</v>
</c>
</row>
<row r="3" spans="1:1" x14ac:dyDescent="0.25">
<c r="A3">
<v>3</v>
</c>
</row>
<row r="4" spans="1:1" x14ac:dyDescent="0.25">
<c r="A4">
<v>4</v>
</c>
</row>
<row r="5" spans="1:1" x14ac:dyDescent="0.25">
<c r="A5">
<v>5</v>
</c>
</row>
<row r="6" spans="1:1" x14ac:dyDescent="0.25">
<c r="A6">
<f>SUM(A1:A5)</f>
<v>15</v>
</c>
</row>
</sheetData>
<pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/>
</worksheet>