これまで、エクセルだと変数を直接おくことができないことを皆さんは知っているであろうか。つまり「x+1」や「x+2」など式だけをあらかじめ書いて、あとでxに数値を直接代入させることが既存のエクセルでは困難ということです。
プログラムを組んだ経験があれば、変数の便利さはすでに理解しているでしょう。しかし、エクセルで扱うほとんどの関数は「SUM(参照範囲)」など直接的に変数を置かない数式が基本形になります。この問題を解決するために、マクロを使えば”変数っぽく”シート上でサクッと演算させることができます。
最近、LET関数 が実装されたことにより、変数をダイレクトに定義することができます。でもLET関数が使えるの環境はごく少数(Office Insiderのみ)です。
ここで紹介する方法は、最新のエクセルでなくても実装できるのが強みです(Excel 2007以降なら可)。早速方法を紹介していきます。
サンプルでは「変数X」に数値を入力し、「条件」で使いたい式をプルダウン選択します。演算結果が「結果」へ出力されます。
注意点は、条件式の特定箇所を書き換えるようにしています。変数を記述する位置を揃えるようにしてください。(サンプルは、すべて1文字目を変数として記述しています。)
プルダウンで指定した条件に対応した式を連携させる
「プルダウンの作成」、「変数を式へ代入」、「計算の実行」という3つのステップを行います。
プルダウンの作成
まず、条件をプルダウンで選択できるようにします。プルダウンでセルをリンクさせる方法は以前紹介しました。
プルダウンを表示するセルを選択し、「データ」タブ内から「データの入力規則」をクリックします。
入力値の種類を「リスト」、元の値を「条件」のある範囲(サンプルではH6からH9)を指定します。
プルダウンで選択したものとリンクした式を出力するセルを指定します。サンプルでは「参照式」というセルを用意しました。ここにVLOOKUP関数を使って以下のように記述します。
コピペ用に書くと次式です。
変数を式へ代入
「変数X」に入力した数値をプルダウンで選択した条件式に代入します。厳密にいえば文字列として条件式の「X」を入力値に置換させます。サンプルの配置なら変数(B4)とV4の2文字目以降を「&」で結合します。
コピペ用は以下です。
ここまでで変数の入力とプルダウン選択をすれば数式が表示されているはずです。
解説
MID(文字列のセル,開始位置,抽出する文字数)
MID関数はセル内のある特定の開始位置から指定文字数を返します。
文字列のセル:
ここでは参照式を表示したセルです。
開始位置:
何文字目から抽出するかです。もしXを1文字目以外の場合右に寄せてRIGHT関数を使うかもしくは入力する変数を工夫すると良いでしょう。
抽出する文字数:
LEN関数を使ってセル内の文字全部を指定しています。これにより参照式の文字列が増減しても対応することができます。
計算の実行
文字列のままだとうまく計算されないので、EVALUATEというExcel 4.0マクロのコマンドを使用します。まず、「数式」タブから「名前の管理」をクリックします。
「新規作成」をクリックし、名前と参照範囲を入力します。
サンプルは次の通りです。
calculation
参照範囲:
=EVALUATE(計算過程のセル)
入力してOKをすると名前の定義に新しく登録されます。
結果を表示したいセルへ、先ほど入力した「名前」を記入します。
計算結果が出力されます。
保存するときはマクロ有効
Excelファイルはマクロのコマンドを使用しているため、マクロを有効にして保存する必要があります。保存する際、ファイルの種類を「Excelマクロ有効テンプレート」を選択してください。
まとめ
マクロの知識が無くてもこの方法なら変数を使って計算することができます。LEN関数が使えない環境では変数の置く位置に気を付ける必要があります。
仮に変数を置く位置を式ごとにバラバラに配置しても、条件を分岐さえすれば対処することは可能です。是非、式に変数を置いて構築することに挑戦してみてください。