値
演算子の被演算項や、関数の引数として指定できる値は、必ずしも数値だけではありません。値には様々な種類があるのです。ここではKawasemiの数式の中に記述できる値について説明します。
数値
数式の中に記述できる数値として有効なのは整数と小数です。整数は「12345」のように、0から9までのアラビア数字の羅列で表現されます。「0123」のように、先頭に0が記述されていても特に支障はありません。この値は「123」とみなされます。小数は「123.456」のように、アラビア数字を小数点「.」で区切って記述します。整数同様、先頭の0は無視されます。数値の中に桁区切りを示すカンマ「,」を挿入することはできません。「1,234」や「1,234.56」のような記述は認められません。
数値は指数で表現することもできます。この記述方法では、数値は仮数部と指数部の2つで構成されます。例えば、「1.23×10-4」という値は、勿論、小数表示で「0.000123」と記述することもできますが、指数表示で「1.23E-4」あるいは「1.23e-4」と記述することもできます。この場合、仮数部は「1.23」、指数部は「-4」で、その間には指数表示であることを示すために大文字の「E」、あるいは小文字の「e」を挿入します。小数表示同様、指数表示でも桁区切りを示すカンマ「,」を挿入することはできません。
日時を扱う関数においては、数値が日時を表す値として扱われることがあります。この場合、日時の起点を示す数値「0」は1899年12月30日0時0分0秒を表し、1日経過するごとに数値は1ずつ増加します。つまり、24時間は1、12時間は0.5、6時間は0.25で表されます。そのため、数値「2.5」は起点から2日半後である1900年1月1日の正午を表します。
ところで、この日時の起点は、Excelでの起点よりも1日早い日時です。その理由は、Excelが、本来、閏年ではない西暦1900年を閏年として扱うことに起因します。Kawasemiは西暦1900年を、暦通り、閏年ではない普通の年として扱うため、日時の起点を1日早めているのです。そのため、起点から1900年2月28日までの約2か月間について、Kawasemiでの日時の計算結果はExcelのそれと一致しません。
ただし、ここで言うExcelとはWindows™版のExcelを指します。ExcelはWindows版とMac™版とで日付の扱いが異なります。KawasemiはWindows版Excelとの互換性を重視しています。そのため、上記期間に限らず、Kawasemiでの日時の計算結果は、Mac版Excelのそれとは常に一致しません。
文字列
2つのダブルクォーテーション「"」で囲まれた記述部分は文字列とみなされます。例えば、「"ABC"&"XYZ"」という数式は、評価結果として文字列「ABCXYZ」を返します。「&」は文字列の連結を指示する演算子で、この演算子は、演算子の左右に記述された文字列をただ単に連結します。
もし、数式として「ABC&XYZ」などと記述してしまった場合、つまり、被演算項が「"」で囲まれていなかった場合、この数式は不正な数式とみなされます。別にこの記述でも問題無いのに、などとは思わないでください。このような記述を認めてしまうと、例えば「A1&A2」という数式の被演算項は、文字列なのか、それとも後述する参照なのか、区別が付かなくなってしまうのです。
この、文字列をダブルクォーテーション「"」で囲む、という手法は、1つだけ困った問題を生み出します。ダブルクォーテーション自体を含む文字列を入力しようとした場合、この文字列をただ「"」で囲んでしまうとエラーになってしまうのです。何故でしょうか。例えば、「color:"Blue"」という文字列を入力したい場合、単にこれを「"」で囲んでしまうと、「"color:"Blue""」となります。この数式を解釈する時、先頭の「"」から次の「"」が出現するまでが文字列として扱われます。つまり、「"color:"」が文字列です。それ以降の「Blue」は文字列として解釈されません。「Blue」という記述は数式として解釈できないため、この数式は構文エラーを引き起こします。
では、「Blue」の前後にある「"」を文字列の一部として解釈させるにはどうしたら良いのでしょうか。それには、ダブルクォーテーション「"」を2つ連ねてエスケープする、ということをします。この例の場合であれば、「"color:""Blue"""」と記述します。これはどういう意味でしょう。「エスケープ」とは、それが記号ではなく単なる文字であることを示す、ということです。つまり、2つ目の「"」は文字列の終了を意味する記号ではなく、単なる文字としてのダブルクォーテーションである、ということを示します。そのためこの例では、連続する2つ目と3つ目の「"」は引き続き文字列の一部として扱われ、更に、4つ目と5つ目の「"」も連続していてエスケープされているため、ここでも文字列は終了しません。そして、末尾に単独で存在する「"」が文字列の終了を示す記号であると解釈されるのです。一言で言うと、文字列の中の連続した2つのダブルクォーテーション「""」は、実は1文字のダブルクォーテーション「"」を表している、ということです。
論理値
論理値は真値である「TRUE」と偽値である「FALSE」の2つだけから成ります。ただし、大文字小文字は問われません。例えば「true」は「TRUE」とみなされます。
実は数値も論理値とみなされます。「0」は偽、それ以外の数値は全て真とみなされます。
エラー値
演算子の被演算項や関数の引数に間違いがあるなど、様々な要因で数式の計算に失敗する場合があります。その場合に、数式はどのような理由で失敗したのかを示すエラー値を返します。以下の表は各エラー値の意味を簡単に示しています。
値 | 意味 |
---|---|
#NUM! | 演算中に何らかの問題が発生したことを表します。 |
#VALUE! | 引数の型が不適切であることを表します。 |
#DIV/0! | 除数0で除算を行ったことを表します。 |
#NAME? | 参照先の名前が間違っていることを表します。 |
#REF! | 循環参照などの不正な参照が発生したことを表します。 |
#N/A | 参照先に有効な値が存在しないことを表します。 |
#NULL! | セル範囲が存在しないことを表します。 |
参照
参照は、実際には値とは少々異なりますが、数式を入力しているセルとは別のセルの値を取得するための、言うなれば変数のようなものです。参照は列名と行番号を組み合わせて記述します。先頭に列名を記述し、それに続けて行番号を記述します。例えば「A3」という記述は、A列の3行目に存在するセルの値を示します。
ただし、KawasemiのシートにはA列の1列しか存在しないため、列名は常に「A」です。
複数のセルを含む「セル範囲」を表す参照を記述することもできます。セル範囲は、その始点と終点をコロン「:」で区切って記述されます。例えば「A3:A5」という記述は、セルA3を始点、セルA5を終点とするセル範囲を表します。このセル範囲にはセルA3、セルA4、セルA5の3つのセルの値が含まれます。セル範囲は複数の値を含むという点において、後述の「配列」と似た機能を果たします。
ところで、参照には「相対参照」と「絶対参照」の2種類が存在します。実際のところ、セルの値を参照する上では特に何も違いはありません。違いが表れるのは、クリップボードからセルに数式を貼り付けた場合です。例えば、セルA3に「A1+A2」という数式を記入したとします。このセルA3をコピーしたり切り取ったりすると、クリップボードにはその内容が格納されます。もし、このクリップボードの内容をセルA4に貼り付けたとしたら、セルA4の数式はどうなるでしょう。「A1+A2」という数式を貼り付けるのですから、セルA4にも全く同じ「A1+A2」という数式が格納されるはず、と思うかもしれませんが、実は違います。それは、この数式に含まれる「A1」や「A2」という参照が「相対参照」であるからです。
「相対参照」とは何でしょう。数学などで「相対的」と言った場合、2点の位置関係を考慮することを意味します。例えば、原点から「4」の距離にある点Pと、原点から「2」の距離にある点Qの2点が存在する時、点Pから見た点Qの「相対位置」は 2 - 4 = -2 です。相対位置を知るには、対象となる点Qだけでなく、視点となる点Pの位置も必要で、視点である点Pを原点とみなすことによって点Qの相対位置は決まります。
「相対参照」も同様です。上記の例では、元々、数式「A1+A2」が記入されていたセルA3を視点として、参照先であるA1とA2の相対位置がクリップボードに格納されます。セルA3から見たA1とA2の相対位置は-2と-1です。この数式をセルA4に貼り付けたなら、セルA4を視点とした相対位置-2と-1のセル、つまり、A2とA3を参照することになるのです。結局、セルA4の数式は「A2+A3」ということになります。相対参照では、視点は常にその数式を保持しているセル自身です。
セルA4に、A2とA3の加算結果ではなく、A1とA2の加算結果を貼り付けたい場合は「絶対参照」を使用します。絶対参照の視点は常に原点に固定されます。上の例のように点Pを必要としません。点Qだけがあれば良いのです。これはつまり、数式がどこへ貼り付けられようとも、常に点Qが参照されることを意味します。
絶対参照を指定するには、「$」を行番号の前に記述します。こうすることで、この参照が絶対参照であることを示すことができます。セルA3に「A$1+A$2」という数式を記入してこれをクリップボードに格納し、その内容をセルA4に貼り付けると、セルA4の数式は元と同じ「A$1+A$2」になります。
絶対参照と相対参照が混在する数式を貼り付けた場合はどうでしょう。セルA3に記入された「A$1+A2」という数式をセルA4に貼り付けた場合、勿論、セルA4には「A$1+A3」という数式が格納されることになります。絶対参照は絶対参照のまま、相対参照は相対参照のまま貼り付けられます。
配列
ベクトルや行列など、複数の値から成る値を記述することができます。これは配列と呼ばれ、カンマ「,」やセミコロン「;」で区切られた値を中括弧「{ }」で囲むことで記述します。例えば「{1,2;3,4;5,6}」という配列は、3行2列の行列を表します。列の区切りはカンマ「,」、行の区切りはセミコロン「;」で指定します。
実は、Kawasemiの配列とExcelの配列には非常に大きな違いが存在します。Excelではセルの中の配列を参照できないのです。例えば、ExcelでセルA1に「={1,2}」、セルA2に「=SUM(A1)」という数式を入力してみてください(Excelでは数式の先頭に「=」を記述します)。「SUM」という関数は引数の総和を求める関数です。つまり、普通に考えればセルA2の数式には、セルA1の中の「1」と「2」を足し上げた「3」という結果が期待されるのですが、実際には「1」という結果が返されます。どうやらExcelでは、セルに格納された配列を参照しようとしても、取得できるのは先頭の値だけらしいのです。しかし、Kawasemiは違います。セルA1の数式として「{1,2}」、セルA2の数式として「SUM(A1)」を入力すれば、期待通り、セルA2の値は3になります。当たり前のようですが、Kawasemiはセルの中の配列を配列として参照できるのです。
配列についてもう一つ、KawasemiとExcelとでは異なる点があります。Excelで配列の要素として記述できるのは、数値、文字列、論理値、そしてエラー値だけです。つまり、Excelで許容される配列要素は、純粋な「値」だけです。しかし、Kawasemiの配列は全ての数式を要素とすることができます。例えば、「{A1+A2, COS(A3)}」のように、配列内で演算子や関数、そして参照をも使用することができます。