セルに入力した数式を別のセルで計算する


セルに数式を入力するときは、先頭に「=」を付けます。

このように、セルに数式を入力すると、セルには数式の計算結果が表示されます。これが表計算ソフトです。ところが、ヒトは贅沢な生き物です。時には、次のようなわがままを言うこともあります。

セルには数式を文字列として入れたいんだ。
たとえば「2+3-1」とかさ。
で、別のセルに、その数式を計算した結果を表示したいんだよね。
数式を直接入れるんじゃなくて。
あ、もちろん「2+3-1」の方を変更したら、ちゃんと再計算してくれないと困るよ。

つまり、こういうことです。

上図のように、任意のセル(ここではセルB2)に文字列で「2+3-1」などと入力します。で、たとえば右隣のセルに、セルB2に入力した「2+3-1」を計算した結果の「4」を表示したいと。

もちろん、セルB2を変更したら、ちゃんとセルC2も自動的に再計算されて欲しいと。

セルに数式を入力すると、セルには計算結果が表示されます。それがどんな数式かは、数式バーを見ないとわかりません。計算している数式と、その結果を両方表示したい・・・というようなことでしょうか。

これには、名前機能と、Excel 4.0マクロのコマンドを使います。やってみましょう。まず、数式が文字列として入力されるセルと、その計算結果を表示するセルの相対的な位置関係を決めます。ここでは「数式が文字列として入力されるセルの、右隣セルに結果を表示する」とします。

右隣に結果を表示すると言うことは、結果を表示するセルから見ると左隣のセルに数式が入力されているということです。この位置関係が、あとで重要になってきます。次に、名前を定義します。このとき、アクティブセルをセルC2に移動しておくと、あとの処理がわかりやすくなります。

名前の定義方法は、Excel 2003までとExcel 2007以降で、手順やダイアログボックスが異なりますので、別々に解説します。お使いのバージョンに合わせてお読みください。

Excel 2007以降で名前を定義する

※画面は、Excel 2010です。

[数式]タブの[定義された名前]グループ[名前の定義]ボタンをクリックします。実行すると[名前の管理]ダイアログボックスが表示されます。

[新規作成]ボタンをクリックして[新しい名前]ダイアログボックスを表示します。

[名前]ボックスに、任意の名前を入力します。この名前が、セルに入力する数式の名前になります。ここでは"計算"としました。

[範囲]リストで、この名前をどのシートで使用するかを指定します。標準の「ブック」を選択すると、ここで定義する名前をブック内のすべてのワークシートで使用できます。これをブックレベルの名前と呼びます。ここでは、アクティブシートである「Sheet1」を選択してシートレベルの名前として定義しました。

[参照範囲]ボックスに、あらかじめ入力されているアドレスを、DeleteキーやBackSpaceキーなどで削除します。

[参照範囲]ボックスに、次のように入力します。

=EVALUATE(B2)

EVALUATEは、Excel 4.0マクロのコマンドです。文字列として指定された数式を計算する働きをします。ポイントは、EVALUATEの引数に指定するアドレスです。ここには、アクティブセルから見て、左隣セルのアドレスを、相対参照で指定します。

ここでは「結果を表示するセルから見て左隣のセルに数式が入力されている」という前提で解説していますから、名前定義を行うときのアクティブセルであるセルC2の左隣セルB2を指定しています。また、一般的な名前定義では、名前を付けるセルを「=Sheet1!$B$2」のような絶対参照形式で指定しますが、ここでは「$」を付けずに相対参照形式で指定します。こうすることで、この計算を複数のセルで使用できます。

Excel 2003までで名前を定義する

上で解説した、名前を定義するところまでを、Excel 2003までのバージョンでやってみます。ポイントは同じですから、手順だけを書きます。

[挿入]-[名前]-[定義]をクリックして[名前の定義]ダイアログボックスを開きます。このとき、操作の前に、アクティブセルをセルC2に移動しておきましょう。

Excel 2007以降では、[新しい名前]ダイアログボックスに[範囲]リストがあり、ブックレベルの名前と、シートレベルの名前を簡単に指定できるようになりました。Excel 2003までの[名前の定義]ダイアログボックスには、そうした機能がありません。ブックレベルの名前を定義するときは、[名前]ボックスに、ただ普通に名前(たとえば"計算"など)を入力します。シートレベルの名前を定義するときは、名前の前にシート名を付けて、たとえば"Sheet1!計算"のように指定します。

名前を数式として入力する

名前の定義が終わったら、定義した名前を数式のように入力します。ここでは「計算」という名前にしましたので、セルC2に「=計算」と入力します。

「=計算」は、左隣セルに文字列として入力した数式を計算して、その結果を表示します。文字列の数式を変更すると、計算結果もリアルタイムに変化します。数式が入力されるべきセルに、数式として機能しない、計算不可能な文字列が入力されると「=計算」はエラーを表示します。

もちろん、関数を使うこともできます。下図のように入力して、セルC2をセルC3にコピーしてみましょう。

これはマクロです

最後に注意点を書きます。

ここで解説したEVALUATEというコマンドは、Excel 4.0のマクロです。本来の使い方ではなく、名前定義として使っていますが、マクロを使っていることに変わりはありません。したがって、このブックを開くとき、Excel 2003までのバージョンでは、次のような「4.0マクロを有効にするか?」という警告が表示されます。

また、マクロを含むブックですから、Excel 2007以降のバージョンでは「マクロ入りブック」として、拡張子「xlsm」で保存しなければなりません。

もちろん、Excel 2007以降でも、マクロのセキュリティによっては「マクロを無効にした」状態で開かれます。名前で定義したEVALUATEを有効にするには、マクロを有効にしなければなりません。