- ベストアンサー
Excelで、セルに計算式を表示させることはできますか?
たとえば セルA1に 1 セルA2に 0.7 が入っていて、 2-A1*A2 という計算をし、 セルA3に値を代入した計算式 =2-1*0.7 を表示し セルA4に計算結果の 1.3 を表示したいのですが、 楽で簡単な良い方法はありませんか?。 セルA3に文字列やCONCATENATE関数などで見た目の計算式を書き込み、セルA4に本物の計算式を書き込む方法を考えたのですが、これだと、計算式や変数や定数が変わった場合にA3、A4両方のセルを書き変える必要があり、面倒です。 このような場合でも面倒にならない楽で簡単な方法がありましたら教えてください!。 よろしくお願いします。
- みんなの回答 (11)
- 専門家の回答
質問者が選んだベストアンサー
こう言うのはどうですか? http://www.katch.ne.jp/~kiyopon/soft/sikihyoji.htm ユーザー定義を使用すれば、希望通りの表示ができると思います。
その他の回答 (10)
- nishi6
- ベストアンサー率67% (869/1280)
例示されている『2-A1*A2』を処理するのではなく、演算子『(,),+,-,*,/,^』を 使った算式のセル指定部分を値に変更した算式に表示換えできるようにしてみました。(ユーザー定義関数です) 例えば、『(,),+,-,*,/,^』を使った算式 =100+(C11+D11)*E11/F11 =(C25+D25)^2+E25/F25 などを、実際の値の式にしてしまいます。 sumやcount、ifなども考えられますが、上記演算子のみ対応しています。 標準モジュールに貼り付けます。 =valFormula(セル) のようにして使います(セル=算式を登録してあるセル) (例 =valFormula(G18)) split関数を使っているのでExcel2000以降で機能するはずです。Excel97の場合は書き換えが必要です。 Function valFormula(Rng As Range) Dim strFML As String '// 対象の算式 Const c22a = "&""" '// 算式を文字列にするための文字列 in Const c22b = """&" '// 算式を文字列にするための文字列 out Const kigo = "(,),+,-,*,/,^" '// 対象の演算子 Dim kgAry() As String '// 対象の演算子を配列化 kgAry = Split(kigo, ",") Dim cot As Integer '// カウンタ(演算子の個数) strFML = Rng.Formula '// とりあえず、演算子とセルを分離した算式(文字列)を作る For cot = 0 To UBound(kgAry) strFML = Application.Substitute(strFML, kgAry(cot), c22a & kgAry(cot) & c22b) Next '// 連続した演算子への対応 strFML = Application.Substitute(strFML, "&&", "&") '// 最初に演算子があったときの修正 If Left(strFML, 2) = "=&" Then strFML = "=" & Mid(strFML, 3, Len(strFML) - 2) End If '// 最後に演算子があったときの修正 If Right(strFML, 1) = "&" Then strFML = Left(strFML, Len(strFML) - 1) End If '// 算式(文字列)のセル指定を値にしてしまう valFormula = Evaluate(strFML) End Function
お礼
私には難しすぎるかも。。。 どうもありがとうございます。
- misatoanna
- ベストアンサー率58% (528/896)
#4です。 数式ではなく数字を代入した式だったのですね。 ごめんなさい。前回は全くのファウルでした。 で、今回も名前定義の方法ですが―― セルA1とA2に元の値(1と0.7)が、セル A4 に通常の数式(2-A1*A2) が入っているとして、 1.セルA3を選択した状態で名前の定義です。 ・定義1: 名前:ADT、参照範囲:=GET.CELL(5,A1)&T(NOW()) ・定義2: 名前:BDT、参照範囲:=GET.CELL(5,A2)&T(NOW()) ・定義3: 名前:FML、参照範囲:=GET.FORMULA(A4)&T(NOW()) 2.セルA3に次の数式を入力します。 =SUBSTITUTE(SUBSTITUTE(FML,"R[-3]C",ADT),"R[-2]C",BDT) セルA4の数式やセルA1、A2を変更すると、自動的にA3に反映します。
お礼
ありがとうございます。 名前の定義、試してみます。
- mshr1962
- ベストアンサー率39% (7417/18945)
#1のmshr1962です。すみませんでした。 マクロも考えましたが面倒なので A3="2-"&A1&"*"&A2&"="&2-A1*A2 A4=LEFT(A3,FIND("=",A3,1)-1) A5=MID(A3,FIND("=",A3,1)+1,LEN(A3)) とすれば A3=2-1*0.7=1.3 A4=2-1*0.7 A5=1.3 になります。これでA3を非表示にしてください。 (行を非表示にするか、文字色を白にする。) 式の変更がある場合はA3のみ変更してください。 条件式などがある場合はA3の"="で判定できません。 その場合は数式では使わない文字に変更してください。
お礼
たびたびありがとうございます。
- jindon
- ベストアンサー率43% (50/116)
A3に ="=2-"&A1&"*"&A2 A4に =2-A1*A2 面倒ですよ!
お礼
どうもありがとうございます。 >面倒ですよ! 同感です。
- neKo_deux
- ベストアンサー率44% (5541/12319)
> 値の代入された計算式を見る方法なのです。 2-A1*A2 の式のうち、A1とA2の部分を置換すればよいのですが、簡単ではありません。 =2-SUM(A1:A2) なんて関数が入った場合、数値に置換すると意味不明ですし、Aで始まるような関数が混じると、関数名、変数の判別さえ苦労します。 四則演算とカッコのみとか、条件付ならば、VBA等を駆使して計算式の文字列を作れる気もしますが、それでさえ結構難しいです。
お礼
どうもありがとうございます。 VBAとか、私はできないもので。。。
- misatoanna
- ベストアンサー率58% (528/896)
#4の追記です。 蛇足でしょうが、名前の定義を、 1.セル A4 をアクティブにした状態で =EVALUATE(A3) とすると、すべてのセルでその セルの一つ上のセルの文字数式を計算できます。 2.アクティブセル位置にかかわらず =EVALUATE($A$3) とすると、どのセルに =CALC と入れても、セル A3 の文字数式の結果が表示されます。
- misatoanna
- ベストアンサー率58% (528/896)
名前定義を利用されるのも一つの方法です。 1.[挿入]-[名前] から、定義します。 名 前: 適当に。ここでは CALC とします。 参照範囲: =EVALUATE($A$3) と入力します。 2.セル A3 の書式を文字列にして、=2-A1*A2 と入力します。 3.セル A4 に =CALC と入力します。 セル A3 の数式を変更するだけで、自動的に計算します。
- mariboh
- ベストアンサー率37% (18/48)
A3とA4に同じ式を入れ、A3だけには、式の頭に'(シングルクォーテーション)を入れます。 'を入れると文字列とみなされるので、式が表示されます。 式が変わるときには、A3のセルをまるごとA4にコピーして'を取り去るだけでいいです。 色々方法はありますが、結構こんなのが一番簡単なんじゃないかと…
お礼
そうですね。手っ取り早くやるには、これが一番ですね。 どうもありがとうございます。
- imogasi
- ベストアンサー率27% (4737/17069)
式を表示する場所(セル)が問題です。 右列同行と仮定して、(したがって使用全列について列挿入しておく必要あり) Sub test01() Dim cl As Range For Each cl In Selection If cl.HasFormula = True Then cl.Offset(0, 1) = "'" & cl.Formula End If Next End Sub 上記を、式があり、式を表示させようと目す範囲を適当に 範囲指定して実行してください。 (A列) (B列) (C列) 12 23 12 =A1 69 =C1*3 93 =SUM(A1:A4) 1 =MATCH(12,A1:A5,0) と言うような結果です。
お礼
imogasiさん、こんにちは。 試してみたのですが、確かに計算式は表示されましたが、私が知りたいのは、値の代入された計算式を見る方法なのです。 どうもありがとうございました。
- mshr1962
- ベストアンサー率39% (7417/18945)
「ツール」「オプション」「表示」で「数式」にチェックすれば 結果でなく数式そのものが表示されます。 元に戻す場合は、チェックをはずしてください。
お礼
mshr1962さん、こんにちは。 この方法ですと、確かに計算式は見られますが、私が知りたいのは、値の代入された計算式を見る方法なのです。 どうもありがとうございました。
お礼
これです!。 どうもありがとうございます。