(57)【要約】【課題】  セルからなるスプレッドシート文書でのユーザ定義関数の使用を可能にする機能を提供すること。【解決手段】  本機能は、区別されたセルを含むセルの値を求めるためのトリガを受け取る。このトリガの受取りに応答して、本機能は、区別されたセルがユーザ定義関数の呼出しを含んでいると判定する。区別されたセルがユーザ定義関数の呼出しを含んでいるとの判定に応答して、本機能は、第２のセルで定義されたユーザ定義関数を利用して（ａ）ユーザ定義関数の呼出しに対する結果の値を求め、かつ（ｂ）求められた結果の値から、区別されたセルの値を獲得する。【選択図】  図３
2006053894.tif 000002
【特許請求の範囲】
【請求項１】
計算処理システムにおいて、スプレッドシート文書でのユーザ定義関数の使用を可能にする方法であって、
前記スプレッドシート文書の第１のセルに格納された式の値を求める一部として、
前記セル内で、ユーザ定義関数を呼び出す組込み関数Ｆの呼出しを識別することであって、前記組込み関数Ｆの前記呼出しは、（ａ）呼び出すべき前記ユーザ定義関数が定義されている第２のセルへの参照、（ｂ）前記第２のセルで定義されている前記ユーザ定義関数の引数の名前、および（ｃ）前記第２のセルで定義されている前記ユーザ定義関数の前記引数の値を渡すこと、
前記指示されたユーザ定義関数の定義を取り出し、
前記引数の名前および引数の値を評価コンテキストスタックに入れ、
前記定義内で、渡されたユーザ定義関数の引数の値を収集する組込み関数Ｒの呼出しを識別し、
前記ユーザ定義関数の前記引数に対して渡される前記値を前記評価コンテキストスタックから取り出すために前記組込み関数Ｒを呼び出し、
前記収集された引数の値を使用して前記ユーザ定義関数の値を求め、ユーザ定義関数の結果の値を獲得し、
前記評価コンテキストスタックから前記引数の名前および引数の値を取り出し、
前記獲得したユーザ定義関数の結果の値を戻すために、前記組込み関数Ｆを呼び出すことであって、
前記組込み関数Ｒの前記呼出しは、パラメータとして受け取った前記引数の名前を前記組込み関数Ｆに渡すこと、および、
前記戻された獲得ユーザ定義関数の結果の値に基づき、前記セルに格納された前記式の値を求めることを含むことを特徴とする方法。
【請求項２】
計算処理システムにおいて、スプレッドシート文書でのユーザ定義関数の使用を可能にする方法であって、
前記スプレッドシート文書のセルに格納された式の値を求める一部として、
前記セル内で、ユーザ定義関数を呼び出す第１の組込み関数の呼出しを識別することであって、前記第１の組込み関数の前記呼出しは、（ａ）呼び出すべき前記ユーザ定義関数の指示および（ｂ）前記ユーザ定義関数の引数の値を渡すこと、
前記指示されたユーザ定義関数の定義を取り出し、
前記定義内で、ユーザ定義関数の引数の値を収集する第２の組込み関数の呼出しを識別し、
前記ユーザ定義関数の前記引数に対して渡される前記値を収集するために前記第２の組込み関数を呼び出し、
前記収集された引数の値を使用して前記ユーザ定義関数の値を求め、ユーザ定義関数の結果の値を獲得するために、前記第１の組込み関数を呼び出すこと、および、
前記獲得したユーザ定義関数の結果の値に基づき、前記セルに格納された前記式の値を求めることを含むことを特徴とする方法。
【請求項３】
前記第１の組込み関数の前記識別された呼出しによって渡される、呼び出すべき前記ユーザ定義関数の前記指示は、前記指示されたユーザ定義関数の定義を含むスプレッドシートセルへの列／行参照であることを特徴とする請求項２に記載の方法。
【請求項４】
前記第１の組込み関数の前記識別された呼出しによって渡される、呼び出すべき前記ユーザ定義関数の前記指示は、前記指示されたユーザ定義関数の定義を含むスプレッドシートセルへの名前付き参照であることを特徴とする請求項２に記載の方法。
【請求項５】
前記第１の組込み関数の前記識別された呼出しによって渡される、呼び出すべき前記ユーザ定義関数の前記指示は、前記指示されたユーザ定義関数のユーザ定義名であることを特徴とする請求項２に記載の方法。
【請求項６】
前記第１の組込み関数に渡される、呼び出すべき前記ユーザ定義関数の前記指示は、前記指示されたユーザ定義関数の前記定義を含むスプレッドシートセルを識別し、前記指示されたユーザ定義関数の前記定義は、前記識別されたスプレッドシートセルから取り出されることを特徴とする請求項２に記載の方法。
【請求項７】
前記第１の組込み関数の前記呼出しはさらに前記ユーザ定義関数の前記引数の名前を渡し、前記第１の組込み関数の前記呼出しはさらに前記ユーザ定義関数の引数の名前および値をスタックに入れ、前記第２の組込み関数の前記呼出しは前記ユーザ定義関数の前記引数の前記名前を受け取り、前記ユーザ定義関数の前記引数の前記名前を使用して、前記スタック上の最上部にある名前と共に格納されている前記値を取り出すことを特徴とする請求項２に記載の方法。
【請求項８】
計算処理システムに、スプレッドシート文書でのユーザ定義関数の使用を可能にする方法を実行させる内容を有するコンピュータ読取り可能媒体であって、前記方法が、
前記スプレッドシート文書のセルに格納された式の値を求める一部として、
前記セル内で、ユーザ定義関数を呼び出す第１の組込み関数の呼出しを識別することであって、前記第１の組込み関数の前記呼出しは、（ａ）呼び出すべき前記ユーザ定義関数の指示および（ｂ）前記ユーザ定義関数の引数の値を渡すこと、
前記指示されたユーザ定義関数の定義を取り出し、
前記定義内で、ユーザ定義関数の引数の値を収集する第２の組込み関数の呼出しを識別し、
前記ユーザ定義関数の前記引数に対して渡される前記値を収集するために前記第２の組込み関数を呼び出し、
前記収集された引数の値を使用して前記ユーザ定義関数の値を求め、ユーザ定義関数の結果の値を獲得するために、前記第１の組込み関数を呼び出すこと、および、
前記獲得したユーザ定義関数の結果の値に基づき、前記セルに格納された前記式の値を求めることを含むことを特徴とするコンピュータ読取り可能媒体。
【請求項９】
計算処理システムにおいて、セルからなるスプレッドシート文書でのユーザ定義関数の使用を可能にする方法であって、
第１のセルを含むセルの値を求めるためのトリガを受け取ること、
前記トリガの受取りに応答して、前記第１のセルが第２のセルで定義されたユーザ定義関数の呼出しを含んでいると判定すること、および、
前記第１のセルが前記第２のセルで定義されたユーザ定義関数の呼出しを含んでいるとの判定に応答して、前記第２のセルで定義された前記ユーザ定義関数を利用して、（ａ）前記第２のセルで定義された前記ユーザ定義関数の前記呼出しに対する結果の値を求め、（ｂ）前記求められた結果の値から、前記第１のセルの値を獲得することを含むことを特徴とする方法。
【請求項１０】
前記ユーザ定義関数の前記呼出しは前記ユーザ定義関数のパラメータの値を含んでおり、ユーザ定義関数は前記含まれているパラメータの値に適用されることを特徴とする請求項９に記載の方法。
【請求項１１】
セルからなるスプレッドシート文書でのユーザ定義関数の使用を可能にする計算処理システムであって、
区別されたセルを含むセルの値を求めるためのトリガを受け取ったことに応答して、前記区別されたセルがユーザ定義関数の呼出しを含んでいると判定するセル計算サブシステムと、
前記区別されたセルがユーザ定義関数の呼出しを含んでいるという、前記セル計算サブシステムによる判定に応答して、前記ユーザ定義関数を利用して（ａ）前記ユーザ定義関数の前記呼出しに対する結果の値を求め、（ｂ）前記求められた結果の値から、前記区別されたセルの値を獲得する、ユーザ定義関数呼出しサブシステムとを備えることを特徴とする計算処理システム。
【請求項１２】
計算処理システム上で実行されるときに、２つの組込み関数を提供するスプレッドシートアプリケーションを含む、コンピュータ読取り可能媒体であって、
ユーザ定義関数を呼び出す第１の組込み関数は、（ａ）呼び出すべきユーザ定義関数の指示、（ｂ）前記指示されたユーザ定義関数の引数の名前、および（ｃ）前記指示されたユーザ定義関数の前記引数の値を含むパラメータをとり、
前記ユーザ定義関数の前記引数に対して渡される前記値を取り出す第２の組込み関数は、前記指示されたユーザ定義関数の前記引数の前記名前を含むパラメータをとることを特徴とするコンピュータ読取り可能媒体。
【請求項１３】
前記第１の組込み関数の名前はＦであり、前記第２の組込み関数の名前はＲであることを特徴とする請求項１２に記載のコンピュータ読取り可能媒体。
【請求項１４】
前記第１の組込み関数は、前記指示されたユーザ定義関数の０または１つまたは複数の引数の名前と引数の値の対を含むパラメータをとることを特徴とする請求項１２に記載のコンピュータ読取り可能媒体。
【請求項１５】
前記第１の組込み関数は、前記指示されたユーザ定義関数の前記引数の名前および引数の値をスタックに入れ、
前記第２の組込み関数は、前記ユーザ定義関数の前記引数に対して渡される前記値を前記スタックから取り出すことを特徴とする請求項１２に記載のコンピュータ読取り可能媒体。
【請求項１６】
（１）前記第１の組込み関数が、（ａ）第１のユーザ定義関数の指示、（ｂ）区別された引数の名前、および（ｃ）第１の値を用いて呼び出され、
（２）前記第１のユーザ定義関数が、（ａ）第２のユーザ定義関数の指示、（ｂ）前記区別された引数の名前、および（ｃ）第２の値を用いて前記第１の組込み関数を呼び出すとき、
前記第２の組込み関数は、（１）前記第２のユーザ定義関数から前記区別された引数の名前を用いて呼び出されるときは前記第２の値を戻し、（２）前記第１のユーザ定義関数から前記区別された引数の名前を用いて呼び出されるときは前記第１の値を戻すことを特徴とする請求項１５に記載のコンピュータ読取り可能媒体。
【請求項１７】
（１）前記第１の組込み関数が、（ａ）第１のユーザ定義関数の指示、（ｂ）区別された引数名、および（ｃ）区別された値を用いて呼び出され、かつ
（２）前記第１のユーザ定義関数が、（ａ）第２のユーザ定義関数の指示を用いて、（ｂ）引数名なしで、または前記区別された引数名を含まない引数名を用いて前記第１の組込み関数を呼び出すとき、
前記第２の組込み関数は、（１）前記第２のユーザ定義関数から前記区別された引数名を用いて呼び出されるときに前記区別された値を戻すことを特徴とする請求項１５に記載のコンピュータ読取り可能媒体。
【請求項１８】
ユーザ定義関数を呼び出す第１の組込み関数の呼出しを含む第１のセルであって、第１の組込み関数の前記呼出しは、（ａ）呼び出すべきユーザ定義関数の定義を含む第２のセルの指示、（ｂ）前記指示されたユーザ定義関数の引数の名前、および（ｃ）前記指示されたユーザ定義関数の前記引数の値を渡す第１のセルと、
呼び出すべきユーザ定義関数の定義を含む前記第２のセルであって、前記ユーザ定義関数自体は、前記ユーザ定義関数の前記引数に対して渡される前記値を取り出す第２の組込み関数の呼出しを含んでおり、前記第２の組込み関数の前記呼出しは、前記指示されたユーザ定義関数の前記引数の前記名前を渡すパラメータをとる前記第２のセルとを含む、スプレッドシート文書のデータ構造を全体として含むことを特徴とする１つまたは複数のコンピュータメモリ。
【請求項１９】
前記第１の組込み関数の名前はＦであり、前記第２の組込み関数の名前はＲであることを特徴とする請求項１８に記載のコンピュータメモリ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアアプリケーションのカスタマイズの分野、より詳細にはソフトウェアアプリケーションのユーザカスタマイズの分野を対象とする。
【背景技術】
【０００２】
ＭＩＣＲＯＳＯＦＴ  ＥＸＣＥＬなどのスプレッドシートアプリケーションにより、そのユーザは数値計算を行うことができる。具体的には、スプレッドシートアプリケーションにより、ユーザは、セルに分割され通常行と列で構成されるワークシート文書を作成することができる。ユーザは、ワークシート内の任意のセルについて内容を指定することができる。セルが数式を含む場合、スプレッドシートアプリケーションは、そのセルに対する結果を得るためにその数式の値を求めようと試みる。
【０００３】
一例として、ユーザは、セルが、自ずとその値になる単一の定数である数式を含むよう指定することができる。
Ａ１：  ５＝５        （１）
【０００４】
ユーザはさらに、セルが、そのオペランドとして定数を有する１つまたは複数のオペランドからなる数式を含むよう指定することもできる。
Ａ２：  ４０／５＝８        （２）
【０００５】
ユーザはさらに、セルが、他の１つまたは複数のセルの結果を参照する数式を含むよう指定することもできる。
Ａ３：  Ａ１＋Ａ２＝５＋８＝１３        （３）
【０００６】
ユーザはさらに、セルが平方根（ＳＱＲＴ）関数など、１つまたは複数の組込み関数を含む数式を含むよう指定することもできる。
Ａ２：  ＳＱＲＴ（９）＝３        （４）
【０００７】
通常、１組の組込み関数を、スプレッドシートアプリケーションの開発者によって、そのスプレッドシートアプリケーションのために定義する。スプレッドシートアプリケーションのユーザは、ワークシート内でそうした組込み関数のいずれかを使用することができる。一部のスプレッドシートアプリケーションでは、ユーザは自分自身の組込み関数を定義することができない。ユーザが自分自身の組込み関数を定義できる他のスプレッドシートアプリケーションもあるが、コンピュータ言語をかなりよく知っている必要があり、場合によっては他の高度なソフトウェア開発ツールも必要である。こうしたスプレッドシートアプリケーションでは、ユーザは、スプレッドシートを編集するのではなく、スプレッドシートプログラムによって呼び出される別個のプログラムのエンティティを作成することによって、自分自身の組込み関数を定義する。
【０００８】
セル内の式に含まれるセル参照は、絶対参照でも相対参照でもよい。セル参照が絶対参照である場合は、式をそのソースセルからターゲットセルにコピーしたとき、参照されるセルは、ターゲットセル内でもソースセル内と同じである。例えば、セルＡ１（「＄Ａ＄１」）への絶対参照を含むセルＢ１内の以下の式をセルＢ２にコピーした場合、セルＢ２はその後セルＢ１と同じ内容および結果を有するようになる。
Ｂ１：  ＄Ａ＄１＋１０＝１５        （５）
Ｂ２：  ＄Ａ＄１＋１０＝１５
【０００９】
一方、セル参照が相対参照である場合、式をコピーしたとき、ターゲットセル内の参照されるセルとターゲットセルの関係は、ソースセル内の参照されるセルとソースセルの関係と同じになる。例えば、セルＡ１（「Ａ１」）への相対参照を含むセルＣ１内の以下の式をセルＣ２にコピーすると、セルＣ２はその後以下に示す内容および結果を有するようになる。
Ｃ１：  Ａ１＋１０＝１５        （６）
Ｃ２：  Ａ２＋１０＝１８
【００１０】
セルＣ１の内容がセルＣ２にコピーされたときに、セルＣ１内のセルＡ１への相対参照がセルＣ２内でセルＡ２への参照に変わったことがわかる。
【００１１】
セル式は普通、異なる何組かの入力データのうちのそれぞれの組に対して同じ１組の動作を実行する方式でコピーされる。例えば、５００行の各行が異なる出荷項目に対応しているスプレッドシートでは、１列目が出荷の総重量を含み、２列目が出荷の項目数を含むことがある。各出荷の項目ごとの平均重量を計算するために、ユーザは、２行目の３列目のセルで、１列目と２列目の商を切り捨てる式を指定することができる。
Ｃ２：  ＴＲＵＮＣ（Ａ２／Ｂ２，  ０）        （７）
【００１２】
ユーザは次に、セルＡ２およびＢ２への相対参照を含むその式を３列目のその他の各セルにコピーすることができる。
Ｃ３：  ＴＲＵＮＣ（Ａ３／Ｂ３，  ０）
．．．                                                （８）
Ｃ５０１：  ＴＲＵＮＣ（Ａ５０１／Ｂ５０１，  ０）
【００１３】
図１Ａは、各セルに含まれている式が表示されたスプレッドシートの一部１００を示すスプレッドシート図である。図１Ｂは、各セルに含まれている式の結果が表示された、同じスプレッドシートの一部１５０を示すスプレッドシート図である。
【００１４】
ユーザは後で、３列目に含まれている商を切り捨てるのではなく丸めると決めた場合、まずセルＣ２の内容を以下のように修正しなければならない。
Ｃ２：  ＲＯＵＮＤ（Ａ２／Ｂ２，  ０）        （９）
【００１５】
ユーザは次に、セルＣ２のこうした新しい内容を以下のように３列目のその他のセルに再コピーしなければならない。
Ｃ３：  ＲＯＵＮＤ（Ａ３／Ｂ３，  ０）
．．．                                            （１０）
Ｃ５０１：  ＲＯＵＮＤ（Ａ５０１／Ｂ５０１，  ０）
【００１６】
図２Ａは、各セルに含まれる式が表示されたスプレッドシートの一部２００を示すスプレッドシート図である。図２Ｂは、各セルに含まれる式の結果が表示されたスプレッドシートの一部２５０を示すスプレッドシート図である。
【００１７】
上記に概要を説明した処理では、数多くの状況で相当な量の手作業が必要となり得る。この処理全体を通じて、ユーザが間違いを犯し、スプレッドシートの一部の正確さが損なわれる危険性がある。
【発明の開示】
【発明が解決しようとする課題】
【００１８】
上述のことを考えると、ユーザが、ネイティブの式構文および式計算を使用したユーザ定義関数を指定し使用することができ、その関数がどこで使用されていても単一の修正によってその関数の動作を更新できるようにするスプレッドシートアプリケーションがあれば、かなり有益であろう。
【課題を解決するための手段】
【００１９】
ユーザが、スプレッドシート内で使用する、ネイティブの式構文および式計算を使用したユーザ定義関数を指定できるようにするソフトウェア機能（「本機能」）を説明する。いくつかの実施形態では、本機能は、従来のスプレッドシートアプリケーションに標準装備された１組の組込み関数に、（１）スプレッドシートのセルから呼び出され、ユーザ定義関数を呼び出し、任意選択でそのユーザ定義関数に引数を渡す組込み関数（いくつかの実施形態ではＦと呼ぶ）、および（２）ユーザ定義関数によって呼び出され、そのユーザ定義関数に渡される引数を取り出す組込み関数（いくつかの実施形態ではＲと呼ぶ）の２つの追加の関数を追加する。
【発明を実施するための最良の形態】
【００２０】
ユーザは、ユーザ定義関数を表す式をスプレッドシートのセルに入力することによってその関数を指定する。このセルを本明細書では関数定義セルと呼ぶ。式の一部として、ユーザは、その関数の値を求めるのに必要な各引数の結果を取り出すためのＲの呼出しを含める。例えば、以下の式では、Ｒが呼び出され、ユーザ定義関数の２つの引数ｔｏｔａｌ＿ｗｅｉｇｈｔおよびｎｕｍｂｅｒ＿ｉｔｅｍｓの結果を取り出す。これらの引数は除算され、その結果は小数点以下が切り捨てられる。
Ａ１：  ＴＲＵＮＣ（Ｒ（“ｔｏｔａｌ＿ｗｅｉｇｈｔ”）／Ｒ（“ｎｕｍｂｅｒ＿ｉｔｅｍｓ”），  ０）        （１１）
【００２１】
ユーザは、Ｆの呼出しをスプレッドシートのセルに入力することによってユーザ定義関数を呼び出す。このセルを本明細書では関数呼出しセルと呼ぶ。Ｆの呼出しは、（ａ）呼び出されるユーザ定義関数の関数定義セルへの参照、および（ｂ）それぞれユーザ定義関数の引数に対応している０または１以上の名前と結果の対を渡す。例えば、以下の式では、Ｆが呼び出され、引数名と結果の対（ｔｏｔａｌ＿ｗｅｉｇｈｔ，  Ａ４）および（ｎｕｍｂｅｒ＿ｉｔｅｍｓ，  Ｂ４）を用いて、セルＡ１で定義されたユーザ定義関数の値を求める。
Ｃ４：  Ｆ（Ａ１，  “ｔｏｔａｌ＿ｗｅｉｇｈｔ”，  Ａ４，  “ｎｕｍｂｅｒ＿ｉｔｅｍｓ”，  Ｂ４        （１２）
【００２２】
一部のスプレッドシートアプリケーションでは、ユーザは個々のセルに名前を付けることができる。例えば、ユーザがセルＡ１を「ＡｖｅｒａｇｅＷｅｉｇｈｔ」と名付けた場合、関数呼出しセルは代わりに以下の引数を含むことができる。この場合、セル名「ＡｖｅｒａｇｅＷｅｉｇｈｔ」が列／行セル参照Ａ１の代わりに使用される。
Ｃ４：  Ｆ（ＡｖｅｒａｇｅＷｅｉｇｈｔ，  “ｔｏｔａｌ＿ｗｅｉｇｈｔ”，  Ａ４，  “ｎｕｍｂｅｒ＿ｉｔｅｍｓ”，  Ｂ４        （１３）
【００２３】
いくつかの実施形態では、本機能は、ユーザ定義関数の引数の結果を評価コンテキストスタックと呼ばれるスタック上に名前で格納する。これらの引数は、スタック上に引数「レジスタ」として格納されると考えられる。
【００２４】
いくつかの実施形態では、本機能は、評価コンテキストスタックに関連して、ユーザ定義関数の引数のスコーピング（ｓｃｏｐｉｎｇ）サービスを提供する。こうしたスコーピングサービスにより、（１）関数定義内の任意のローカル参照が、参照されるセルを呼出し側セルの評価コンテキスト内から識別するのに、十分にグローバルな参照に変換されるようになり、（２）所与の引数名に対して最近渡された結果が関数の計算において使用されるようになり、および／または（３）（ａ）第１の関数が第２の関数を呼び出すように定義され、および（ｂ）所与の引数名に対する結果が第１の関数から第２の関数に渡されない場合に、第２の関数が、第１の関数に渡されたその引数名に対する結果、または第１の関数を呼び出した関数チェーン内の先祖関数（ａｎｃｅｓｔｏｒ）を使用できるようになる。これは、「動的スコーピング」として知られている。ただし、いくつかの実施形態では、本機能は代わりに静的スコーピングを使用する。この場合、レジスタは、それが現在の関数呼出しの評価コンテキストで渡された場合にのみ見い出される。
【００２５】
ユーザがスプレッドシート内で使用するユーザ定義関数を、上記に概要を説明した方式のいくつかまたはすべてによって指定できるようにすることにより、ユーザはより効率的かつ簡単に再使用可能な式を作成し、維持し、利用できるようになる。
【００２６】
図３は、本機能を実装できる適当な計算処理システム環境３００の例を示す構成図である。計算処理システム環境３００は適当な計算処理環境の一例に過ぎず、本機能の使用または機能の範囲に関するいかなる限定も示唆するものではない。この計算処理環境３００は、例示的動作環境３００内に示す任意の１つのコンポーネントまたはコンポーネントの組合せに関して、いかなる依存関係も要件も有するものと解釈すべきではない。
【００２７】
本機能は、数多くの他の汎用または専用計算処理システム環境または構成で動作可能である。本機能と一緒に使用するのに適当であり得る周知の計算処理システム、環境、および／または構成の例には、それだけに限らないが、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドまたはラップトップ装置、タブレット装置、マルチプロセッサシステム、マイクロプロセッサに基づくシステム、セットトップボックス、プログラム可能な家庭用電化製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上述のシステムまたは装置のいずれかを含む分散計算処理環境などが含まれる。
【００２８】
本機能は、プログラムモジュールなど、コンピュータによって実行されるコンピュータ実行可能命令の一般的な状況で説明することができる。一般に、プログラムモジュールは、個々のタスクを行うまたは個々の抽象データタイプを実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。本機能はさらに、通信ネットワークを介してリンクされているリモート処理装置によってタスクが実行される分散計算処理環境で実施することもできる。分散計算処理環境では、プログラムモジュールは、メモリ記憶装置を含むローカルおよび／またはリモートのコンピュータ記憶媒体内に配置することができる。
【００２９】
図３に示すように、本機能を実装した例示的なシステムは、コンピュータ３１０の形式の汎用計算処理装置を含む。コンピュータ３１０のコンポーネントには、それだけに限らないが、処理装置３２０、システムメモリ３３０、および、システムメモリを含む様々なシステムコンポーネントを処理装置３２０に結合するシステムバス３２１が含まれ得る。システムバス３２１は、様々なバスアーキテクチャのいずれかを使用する、メモリバスまたはメモリコントローラ、周辺バス、およびローカルバスを含むいくつかのタイプのバス構造のどれでもよい。限定ではなく例として、そうしたアーキテクチャには、業界標準アーキテクチャ（ＩＳＡ）バス、マイクロチャネルアーキテクチャ（ＭＣＡ）バス、拡張ＩＳＡ（ＥＩＳＡ）バス、ビデオ電子標準協会（ＶＥＳＡ）ローカルバス、および周辺装置相互接続（ＰＣＩ）バス（メザニンバスともいう）が含まれる。
【００３０】
コンピュータ３１０は、通常、様々なコンピュータ読取り可能媒体を含む。コンピュータ読取り可能媒体は、コンピュータ３１０からアクセスでき、揮発性および不揮発性媒体、ならびに、取外し可能および取外し不能媒体を含むどんな利用可能な媒体でもよい。例をあげると、それだけに限らないが、コンピュータ読取り可能媒体には、コンピュータ記憶媒体および通信媒体が含まれ得る。コンピュータ記憶媒体には、コンピュータ読取り可能命令、データ構造、プログラムモジュール、またはその他のデータなどの情報を記憶するための任意の方法または技術で実装された揮発性および不揮発性、取外し可能および取外し不能媒体が含まれる。コンピュータ記憶媒体には、それだけに限らないが、ランダムアクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、電気的消去・プログラム可能読取り専用メモリ（ＥＥＰＲＯＭ）、フラッシュメモリ、またはその他のメモリ技術、コンパクトディスク読取り専用メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、またはその他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置、またはその他の磁気記憶装置、あるいは所望の情報の記憶のために使用することができ、コンピュータ３１０からアクセスすることができる任意の他の媒体が含まれる。通信媒体は、通常、搬送波その他の搬送機構などの被変調データ信号としてコンピュータ読取り可能命令、データ構造、プログラムモジュール、またはその他のデータを実施し、任意の情報送達媒体を含む。「被変調データ信号」という用語は、その特性セットの１つまたは複数を有する信号、またはその信号中に情報を符号化するように変更された信号を意味する。例をあげると、それだけに限らないが、通信媒体には、有線ネットワークや直接配線接続などの有線媒体、および音響、無線周波数、赤外線その他の無線媒体などの無線媒体が含まれる。上記のいずれかの組合せもコンピュータ読取り可能媒体の範囲内に含むべきである。
【００３１】
システムメモリ３３０は、読取り専用メモリ（ＲＯＭ）３３１やランダムアクセスメモリ（ＲＡＭ）３３２など、揮発性および／または不揮発性メモリの形のコンピュータ記憶媒体を含む。起動時などに、コンピュータ３１０内の要素間での情報転送を支援する基本ルーチンを含む基本入出力システム（ＢＩＯＳ）３３３は、通常、ＲＯＭ３３１に格納されている。ＲＡＭ３３２は、通常、処理装置３２０から直ちにアクセス可能であり、かつ／または現在それによって操作されているデータおよび／またはプログラムモジュールを含む。限定ではなく例として、図３に、オペレーティングシステム３３４、アプリケーションプログラム３３５、その他のプログラムモジュール３３６、および、プログラムデータ３３７を示す。
【００３２】
コンピュータ３１０は、その他の取外し可能／取外し不能、揮発性／不揮発性コンピュータ記憶媒体を含むこともできる。例としてあげるにすぎないが、図３に、取外し不能な不揮発性の磁気媒体との間で読書きを行うハードディスクドライブ３４１、取外し可能な不揮発性の磁気ディスク３５２との間で読書きを行う磁気ディスクドライブ３５１、およびＣＤ−ＲＯＭやその他の光媒体など、取外し可能な不揮発性の光ディスク３５６との間で読書きを行う光ディスクドライブ３５５を示す。例示的動作環境で使用できる他の取外し可能／取外し不能、揮発性／不揮発性コンピュータ記憶媒体には、それだけに限らないが、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、固体ＲＡＭ、固体ＲＯＭなどが含まれる。ハードディスクドライブ３４１は、通常、インターフェース３４０などの取外し不能メモリインターフェースを介してシステムバス３２１に接続され、磁気ディスクドライブ３５１および光ディスクドライブ３５５は、通常、インターフェース３５０などの取外し可能メモリインターフェースによってシステムバス３２１に接続される。
【００３３】
上記に説明し図３に示したドライブおよびその関連するコンピュータ記憶媒体は、コンピュータ３１０のコンピュータ読取り可能命令、データ構造、プログラムモジュールおよびその他のデータの、記憶域を提供する。例えば、図３では、ハードディスクドライブ３４１をオペレーティングシステム３４４、アプリケーションプログラム３４５、その他のプログラムモジュール３４６およびプログラムデータ３４７を記憶するものとして示す。これらのコンポーネントは、オペレーティングシステム３３４、アプリケーションプログラム３３５、その他のプログラムモジュール３３６、およびプログラムデータ３３７と同じでも、異なっていてもよい。オペレーティングシステム３４４、アプリケーションプログラム３４５、その他のプログラムモジュール３４６、およびプログラムデータ３４７は、それらが少なくとも異なるコピーであることを示すために、本明細書では異なる番号が付されている。ユーザは、タブレットまたは電子デジタイザ３６４、マイクロフォン３６３、キーボード３６２、一般的には、マウス、トラックボール、またはタッチパッドと呼ばれるポインティング装置３６１などの入力装置を介して、コマンドおよび情報をコンピュータ３１０に入力することができる。他の入力装置（図示せず）には、ジョイスティック、ゲームパッド、サテライトディッシュ、スキャナなどが含まれる。上記その他の入力装置は、しばしば、システムバス３２１に結合されたユーザ入力インターフェース３６０を介して処理装置３２０に接続されるが、パラレルポート、ゲームポート、ユニバーサルシリアルバス（ＵＳＢ）などの他のインターフェースおよびバス構造によって接続されてもよい。モニタ３９１または他の種類の表示装置も、ビデオインターフェース３９０などのインターフェースを介してシステムバス３２１に接続することができる。モニタ３９１は、タッチスクリーンパネルなどと統合することもできる。モニタおよび／またはタッチスクリーンパネルは、タブレットタイプのパーソナルコンピュータ内など、計算処理装置３１０が組み込まれている筐体に物理的に結合することもできる。さらに、計算処理装置３１０などのコンピュータは、スピーカ３９５やプリンタ３９６など、出力周辺インターフェース３９４などを介して接続できる他の周辺出力装置を含むこともできる。
【００３４】
コンピュータ３１０は、リモートコンピュータ３８０など１つまたは複数のリモートコンピュータへの論理接続を使用して、ネットワーク化された環境で動作することができる。リモートコンピュータ３８０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピア装置、あるいはその他一般のネットワークノードでもよく、通常、コンピュータ３１０に関して上述した要素の多くまたはすべてを含む。ただし、図３にはメモリ記憶装置３８１のみが示してある。図３に示した論理接続は、ローカルエリアネットワーク（ＬＡＮ）３７１および広域ネットワーク（ＷＡＮ）３７３を含むが、他のネットワークを含むこともできる。そうしたネットワーク環境は、オフィス、企業規模のコンピュータネットワーク、イントラネットおよびインターネットでは一般的である。例えば、本機能では、コンピュータシステム３１０はデータの移行元となるソースマシンとなることができ、リモートコンピュータ３８０がその宛先マシンとなることができる。ただし、必ずしもソースマシンおよび宛先マシンをネットワークまたは任意の他の手段によって接続する必要はなく、代わりに、データを、ソースプラットフォームが書き込むことができ、１つまたは複数の宛先プラットフォームが読み取ることのできる、任意の媒体を介して移行することもできる。
【００３５】
ＬＡＮネットワーク環境で使用されるとき、コンピュータ３１０は、ネットワークインターフェースまたはアダプタ３７０を介してＬＡＮ３７１に接続される。ＷＡＮネットワーク環境で使用されるときは、コンピュータ３１０は、通常、モデム３７２、またはインターネットなどのＷＡＮ３７３を介して通信を確立するその他の手段を含む。モデム３７２は内蔵でも外付けでもよく、ユーザ入力インターフェース３６０、またはその他の適当な機構を介してシステムバス３２１に接続することができる。ネットワーク化環境では、コンピュータ３１０に関連して示したプログラムモジュール、またはその一部を、リモートのメモリ記憶装置に記憶することもできる。限定ではなく例として、図３に、リモートアプリケーションプログラム３８５をメモリ装置３８１上にあるものとして示す。図示したネットワーク接続は例示的なものであり、コンピュータ間の通信リンクを確立する他の手段も使用できることが理解されよう。
【００３６】
様々な機能およびデータを、特定の方式で構成された個々のコンピュータシステムにあるものとして図３に示したが、そうした機能およびデータは、様々な他の方法で異なる構成のコンピュータシステムに分散させることもできることが当業者には理解されよう。上述のように構成されたコンピュータシステムは、通常、本機能の動作を支援するために使用されるが、様々なタイプおよび構成の装置を使用し様々なコンポーネントを有する本機能を実装できることが当業者には理解されよう。
【００３７】
図４Ａ〜５Ｂは、図１Ａ〜２Ｂに示したものと同様のスプレッドシートを作成するための、本機能の使用を示すスプレッドシート図である。図４Ａに、各セルの「式」が表示された第１の状態のスプレッドシートの一部４００を示す。セルＡ１が上記の行（１１）に示した関数定義を含んでいることがわかる。さらに、セルＣ４〜Ｃ６は、上記の行（１２）に示したものと同様の、セルＡ１内のユーザ定義関数の呼出しを含んでいることがわかる。
【００３８】
図４Ｂに、各セルに含まれる式の結果が表示された同じスプレッドシートの一部４５０を示す。例えば、セルＣ４内の式の値は、３５割る３の商である１１．６が切り捨てられて、結果１１になったことがわかる。さらに、図４Ｂでは、関数定義セルＡ１は、Ｒ関数の呼出し中で渡されるレジスタ名を含まない、空の評価コンテキストによって実行されるＲ関数の呼出しを含んでいるので、結果が＃Ｎ／Ａの値になることがわかる。評価コンテキストで見つからないレジスタ名に、０を戻す方式でＲ関数が実装されているいくつかの実施形態では、関数定義セルＡ１はＴＲＵＮＣ（０／０，０）の値になるので、エラーメッセージ＃Ｎ／Ａではなく、エラーメッセージ＃Ｄ｜Ｖ／０！を含むことになる。いくつかの実施形態では、Ｒ関数は、Ｒ関数呼出しで指定されるレジスタ名が評価コンテキストで見つからない場合に、Ｒ関数によって戻されるデフォルト値を指定する、第２のオプション引数をとるように実装される。
【００３９】
図５Ａに、セルＡ１内の関数定義が以下の式に変更された後の同じスプレッドシートの一部５００を示す。
ＲＯＵＮＤ（Ｒ（“ｔｏｔａｌ＿ｗｅｉｇｈｔ”）／Ｒ（“ｎｕｍｂｅｒ＿ｉｔｅｍｓ”），０）        （１４）
【００４０】
セルＣ４〜Ｃ６は、すべてセルＡ１内の関数定義を参照しているので、図５Ａに示す変更された関数定義を利用するために、それらを変更する必要はない。
【００４１】
図５Ｂに、各セルに含まれる式の結果が表示された同じスプレッドシードの一部５５０を示す。例えば、セルＣ４が今度は、商１１．６を１２に丸めることによって得られた結果１２になっていることがわかる。
【００４２】
図６は、関数Ｆが呼び出されたときに、本機能によって通常実行される諸ステップを示す流れ図である。ステップ６００で、関数Ｆが呼び出される。こうした各呼出しは少なくとも、値を求めるべきユーザ定義関数を含むセルへの参照である、cellReferenceパラメータを渡す。関数Ｆの各呼出しはさらに、値を求めるべきその関数に対して定義されている引数の、１つまたは複数の名前と結果の対を含むことができる。ステップ６０１で、本機能は、cellReferenceパラメータによって識別された関数定義セルからユーザ定義関数を表す式を取り出す。例えば、上記の行（１２）に示す関数Ｆの呼出しの場合、本機能はセルＡ１から式を取り出す。ステップ６０２で、本機能は、取り出された式に含まれる任意のローカル参照を、関数評価コンテキストで使用できるグローバル参照に変換する。ステップ６０３で、本機能は、registerNameパラメータとregisterValueパラメータの各対を、新しいスタックエンティティとして評価コンテキストスタックに入れる。
【００４３】
図７は、本機能が上記の行（１２）に示す関数Ｆの呼出しに対してステップ６０３を実行した後の、評価コンテキストスタックの状態を示すスタック図である。スタック７００上のトップエントリが、図５Ｂに示すセルＢ４から取り出された、レジスタ名「ｎｕｍｂｅｒ＿ｉｔｅｍｓ」の結果３を含んでいることがわかる。このスタックはさらに、図５Ｂに示すセルＡ４から取り出された、レジスタ名「ｔｏｔａｌ＿ｗｅｉｇｈｔ」の結果３５も含んでいる。
【００４４】
図６に戻ると、ステップ６０４で、本機能は、評価コンテキストスタックによって確定した評価コンテキストにおいて式の値を求める。式の値を求める間に出会う関数Ｒへの各参照に対しては、本機能は通常、図８に示し以下に説明する諸ステップを実行する。ステップ６０５で、本機能は、渡されたregisterNameとregisterValueの各対のスタックエントリを、評価コンテキストスタックから取り出す。例では、本機能がステップ６０５を実行した後、評価コンテキストスタックは空になっている。ステップ６０６で、本機能は、式の値を求めることによって得られた結果を戻す。
【００４５】
図８は、関数Ｒが呼び出されるたびに、本機能によって通常実行される諸ステップを示す流れ図である。ステップ８００で、単一のパラメータであるregisterNameを用いて関数Ｒが呼び出される。ステップ８０１〜８０４で、本機能は、評価コンテキストスタックの最上部から始まりスタック内を下方に進みながら、スタック内の各スタックエントリをループする。ステップ８０２で、関数Ｒにパラメータとして渡されたregisterNameが現在のスタックエントリのregisterNameと合致した場合、本機能はステップ８０３に進み、現在のスタックエントリ内のregisterValueを戻す。合致しない場合は、本機能はステップ８０４に進む。ステップ８０４で、処理すべき追加のスタックエントリが残っている場合、本機能はステップ８０１に進み、次のスタックエントリを処理する。残っていない場合は、本機能はステップ８０５に進む。ステップ８０５では、本機能は０を戻す。
【００４６】
図８は、合致するレジスタを求めてスタック内を通り抜ける線形探索を示す。いくつかの実施形態では、本機能は、赤黒の平衡二分木のレジスタなど、木構造のレジスタによって潜在的により効率的な探索を使用する。
【００４７】
図８は、動的スコーピングの応用例を示す。ただし、いくつかの実施形態では、本機能は静的スコーピングを使用し、Ｒ関数におけるこうした探索は、現在の関数計算のスタックに入っている引数に対してのみ行われる。
【００４８】
図９Ａ〜９Ｂは、引数ＸおよびＹが第１のユーザ定義関数に渡され、それが第２のユーザ定義関数を呼び出し、それに別個のパラメータＸを渡している第２の例を示す。図９Ａに、そうした２つの関数および第１の関数の呼出しを含み、各セルに含まれている式が表示されたスプレッドシートの一部９００を示す。セルＡ５は、セルＡ２内にその定義があるユーザ定義関数を呼び出し、セルＡ２内の関数定義は、セルＡ１内にその定義があるユーザ定義関数を呼び出すことがわかる。
【００４９】
図１０Ａは、関数ＦがセルＡ５で呼び出された後の、評価コンテキストスタックの内容を示すスタック図である。関数Ｆのこの呼出しで指定されるように、このスタックは、レジスタＸの結果３を反映するエントリ、および、レジスタＹの結果４を反映するエントリを含むことがわかる。
【００５０】
図１０Ｂは、セルＡ２内での関数Ｆの呼出し後の、スタック１０５０の内容を示すスタック図である。セルＡ２内での関数Ｆの呼出しに従って、スタック上のトップエントリが、今度はレジスタＸの結果２５を含むことがわかる。
【００５１】
レジスタＸの結果を戻すために関数ＲがセルＡ１で呼び出されるとき、それはレジスタＸの最上部にある結果、すなわちスタックエントリ１内の結果２５を戻す。したがって、関数Ｒは、パラメータとして最近渡され合致する名前を有する結果を戻すことがわかる。セルＡ２内での関数Ｆの指示が結果５を戻し、それがセルＡ５内での関数Ｆの呼出しによって戻される。図９Ｂに、各セルに含まれている式の結果が示してあり、セルＡ５に含まれている式の値は結果５になることを示している。
【００５２】
図１１Ａ〜１１Ｂは、第３の例を示すスプレッドシート図である。図１１Ａに、各セルに含まれている式を示す。セルＡ５では、セルＡ２で定義されたユーザ定義関数が呼び出され、それにＸパラメータの結果１が渡されていることがわかる。
【００５３】
図１２は、セルＡ２で定義されたユーザ定義関数の呼出しがセルＡ５で行われた後の、評価コンテキストスタック１２００を示すスタック図である。これは、Ｘという名前のレジスタが結果１を有することを示している。図１１Ａに戻ると、セルＡ２で定義されたユーザ定義関数が呼び出されるとき、それはＲ関数を使用してパラメータＸの評価コンテキストスタックから結果１を取り出し、セルＡ１で定義されたユーザ定義関数にいかなるパラメータも渡さずに、セルＡ１で定義されたユーザ定義関数を呼び出す。したがって、セルＡ１で定義されたユーザ定義関数が呼び出されるとき、評価コンテキストスタックは図１２に示す状態と同じ状態である。すなわち、セルＡ２内での呼出しによってさらにスタックに入れられた引数はない。したがって、セルＡ１で定義されたユーザ定義関数が引数Ｘの結果を取り出すためにＲ関数を二度呼び出すとき、Ｒ関数は、セルＡ５内での関数呼出しによって提供された、スタックエントリ１のレジスタの結果１を戻す。したがって、呼出しチェーンにおいて後で呼び出されるユーザ定義関数は、チェーン内で以前に呼び出されたユーザ定義関数用に指定されるパラメータの結果を利用することができる。
【００５４】
図１１Ｂに、各セルに含まれている式の結果が表示された、図１１Ａのスプレッドシートの一部を示す。セルＡ５は、セルＡ１およびセルＡ２で定義されたユーザ定義関数の計算に基づく結果を含んでいることがわかる。
【００５５】
上述の機能は、様々な方式で簡単に適合または拡張できることが当業者には理解されよう。例えば、本機能は、スプレッドシートアプリケーション、ならびに、セル以外のデータ構造を使用する他の同様のアプリケーション、および／または上述のもの以外の様々な技術および参照様式を使用して参照できるアプリケーションで使用することができる。さらに、本機能では、組込み関数ＦおよびＲを異なる名前にすることもできる。また、本機能は、そうした組込み関数がなくても動作することができ、スプレッドシート内のユーザ定義関数および呼出しを識別するための、追加の構文解析または他の技術を実施することもできる。上述の説明は好ましい実施形態で行ってきたが、本発明の範囲は、添付の特許請求の範囲およびそれに記載された要素によってのみ定義されている。
【図面の簡単な説明】
【００５６】
【図１Ａ】スプレッドシート内の異なる何組かの入力データのうちのそれぞれの組の入力データに対して同じ１組の動作を実行する従来の手法を示すスプレッドシート文書を示す図である。
【図１Ｂ】スプレッドシート内の異なる何組かの入力データのうちのそれぞれの組の入力データに対して同じ１組の動作を実行する従来の手法を示すスプレッドシート文書を示す図である。
【図２Ａ】スプレッドシート内の異なる何組かの入力データのうちのそれぞれの組の入力データに対して同じ１組の動作を実行する従来の手法を示すスプレッドシート文書を示す図である。
【図２Ｂ】スプレッドシート内の異なる何組かの入力データのうちのそれぞれの組の入力データに対して同じ１組の動作を実行する従来の手法を示すスプレッドシート文書を示す図である。
【図３】本機能を実装できる適当な計算処理システム環境の例を示す構成図である。
【図４Ａ】図１Ａ〜２Ｂに示したものと同様のスプレッドシートを作成するための本機能の使用を示すスプレッドシート図である。
【図４Ｂ】図１Ａ〜２Ｂに示したものと同様のスプレッドシートを作成するための本機能の使用を示すスプレッドシート図である。
【図５Ａ】図１Ａ〜２Ｂに示したものと同様のスプレッドシートを作成するための本機能の使用を示すスプレッドシート図である。
【図５Ｂ】図１Ａ〜２Ｂに示したものと同様のスプレッドシートを作成するための本機能の使用を示すスプレッドシート図である。
【図６】関数Ｆが呼び出されるときに本機能によって通常実行される諸ステップを示す流れ図である。
【図７】本機能が関数Ｆの呼出しに対してステップ６０３を実行した後の評価コンテキストスタックの状態を示すスタック図である。
【図８】関数Ｒが呼び出されるたびに本機能によって通常実行される諸ステップを示す流れ図である。
【図９Ａ】引数ＸおよびＹが第１のユーザ定義関数に渡され、それが第２のユーザ定義関数を呼び出し、それに別個のパラメータＸを渡している第２の例を示す図である。
【図９Ｂ】引数ＸおよびＹが第１のユーザ定義関数に渡され、それが第２のユーザ定義関数を呼び出し、それに別個のパラメータＸを渡している第２の例を示す図である。
【図１０Ａ】第２の例における様々な時点での評価コンテキストスタックの内容を示すスタック図である。
【図１０Ｂ】第２の例における様々な時点での評価コンテキストスタックの内容を示すスタック図である。
【図１１Ａ】第３の例を示すスプレッドシート図である。
【図１１Ｂ】第３の例を示すスプレッドシート図である。
【図１２】第３の例の間の評価コンテキストスタックの内容を示すスタック図である。
【図１Ａ】
2006053894.tif 000003
【図１Ｂ】
2006053894.tif 000004
【図２Ａ】
2006053894.tif 000005
【図２Ｂ】
2006053894.tif 000006
【図３】
2006053894.tif 000007
【図４Ａ】
2006053894.tif 000008
【図４Ｂ】
2006053894.tif 000009
【図５Ａ】
2006053894.tif 000010
【図５Ｂ】
2006053894.tif 000011
【図６】
2006053894.tif 000012
【図７】
2006053894.tif 000013
【図８】
2006053894.tif 000014
【図９Ａ】
2006053894.tif 000015
【図９Ｂ】
2006053894.tif 000016
【図１０Ａ】
2006053894.tif 000017
【図１０Ｂ】
2006053894.tif 000018
【図１１Ａ】
2006053894.tif 000019
【図１１Ｂ】
2006053894.tif 000020
【図１２】
2006053894.tif 000021
【外国語明細書】
2006053894000001.pdf