『セルの値で関数を使い分けたい』(ラムダ大好き) 次のような表があるとします | A | B | C | D | 1 | 3 | + | 6 | | 2 | 9 | / | 3 | | B列の値をもとにD1, D2に共通して正しい計算結果を与える式をつくりたいです。 もちろんIF関数, MATCH関数で場合わけをするという手もありますが、 加算, 除算だけではなく他の二項演算を導入していこうとすると、 非常に見通しがわるくなります。 =EVAL("A1"&B1&"C1") というようなEVAL関数があれば即解決できそうなのですが、よい実装はありますでしょうか? 補足 INDIRECT関数は正しく動作しません。=INDIRECT("SUM")(A1, C1)という式はもちろん"!REF"になります。 < 使用 Excel:Office365、使用 OS:Windows10 > ---- 結果だけで良ければ 名前(関数)の参照先を↓としておけば一応その様になります。。。 =EVALUATE(Sheet1!A1&Sheet1!B1&Sheet1!C1) 例 =関数 (SoulMan) 2021/06/06(日) 14:49 ---- ご返信ありがとうございます。 初歩的な質問で申し訳ないのですが、EVALUATE関数はVBA上の関数ですよね? 確かにユーザ定義関数で、EVALUATE関数相当のシート関数をつくることは可能ですが、再計算が必要になるのは場面があるのがあまり衛生的でない気がします。 | 左辺 | B | 右辺 | 計 | 1 | 3 | たす | 6 | =EVAL(B1) | 2 | 9 | かける | 3 | =EVAL(B2) | 例えば名前の管理で、"たす"という名前で"=テーブル1[@左辺]+テーブル1[@右辺]"という項目を設定しておきます。 そして、後で、"たす"の参照範囲を"=テーブル1[@左辺]+テーブル1[@右辺]+100"と変更したとします。 そのとき、シート上で再計算をかけないと値が正しく更新されません。 この例では、一回で再計算できますが、この参照範囲の中に別の定義された名前がでてくるとどうなるか検討がつきません。(e.g. "かける"の定義の中に"たす"があるなど) なるべく、シート関数で完結させたいのですが、よい方法をご教示いただけませんでしょうか? (ラムダ大好き) 2021/06/06(日) 15:37 ---- 少々訂正させて下さい (誤)再計算が必要になるのは場面があるのが (正)再計算が必要になる場面があるのが (誤)この参照範囲の中に別の定義された名前がでてくるとどうなるか (正)この参照範囲にEVAL関数が使われているとどうなるのか (ラムダ大好き) 2021/06/06(日) 15:56 ---- >EVALUATE関数はVBA上の関数ですよね? (SoulMan)さんの方法は、Excel 4.0マクロのコマンドです 値の変更により再計算もされます VBAのEvaluateメソッドを使用して ユーザ定義関数を作成するのとは異なります (どん) 2021/06/06(日) 15:58 ---- (どん)さんありがとうございます。 コマンドというものは、勉強不足でよくわかりませんが、名前の管理で直接使えるものと理解をしました。 今一度ユーザ定義関数ではなく、(SoulMan)さんが提示頂いた方式でやってみましたが、やはり再計算はされません。 手続きは次のとおりです。(上記の例のD1, D2は"=EVAL"として読み替えて下さい) 名前の管理にて EVAL : =EVALUATE(テーブル1[@B]) たす : =テーブル1[@左辺]+テーブル1[@右辺] わる : =テーブル1[@左辺]/テーブル1[@右辺] となっているのを、 たす : =テーブル1[@左辺]+テーブル1[@右辺]+1000 と変更したとき、+1000が反映されない もはや、EVALUATEが関係あるのか不明ですが、なにかご存じの方はご教示下さい。 (ラムダ大好き) 2021/06/06(日) 17:42 ---- あのぉ、、最初の質問内容から変わってますから。。。 よくご自身で確認してくださいね。。。ww (SoulMan) 2021/06/06(日) 18:24 ---- (SoulMan)さん 失礼しました。別スレットで立て直します。 (ラムダ大好き) 2021/06/06(日) 18:28 ---- 回答頂いた皆様ありがとうございました。 (ラムダ大好き) 2021/06/06(日) 18:29