こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excelで、セルに計算式を表示させることはできますか?

たとえば
  セルA1に 1
  セルA2に 0.7
が入っていて、 2-A1*A2 という計算をし、
  セルA3に値を代入した計算式 =2-1*0.7 を表示し
  セルA4に計算結果の 1.3 を表示したいのですが、
楽で簡単な良い方法はありませんか?。

セルA3に文字列やCONCATENATE関数などで見た目の計算式を書き込み、セルA4に本物の計算式を書き込む方法を考えたのですが、これだと、計算式や変数や定数が変わった場合にA3、A4両方のセルを書き変える必要があり、面倒です。
このような場合でも面倒にならない楽で簡単な方法がありましたら教えてください!。

よろしくお願いします。

投稿日時 - 2004-06-16 14:36:19

QNo.894324

困ってます

質問者が選んだベストアンサー

こう言うのはどうですか?
http://www.katch.ne.jp/~kiyopon/soft/sikihyoji.htm

ユーザー定義を使用すれば、希望通りの表示ができると思います。

参考URL:http://www.katch.ne.jp/~kiyopon/soft/sikihyoji.htm

投稿日時 - 2004-06-16 15:57:57

お礼

これです!。
どうもありがとうございます。

投稿日時 - 2004-06-21 20:52:16

ANo.7

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(11)

ANo.11

例示されている『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

投稿日時 - 2004-06-17 18:56:33

お礼

私には難しすぎるかも。。。
どうもありがとうございます。

投稿日時 - 2004-06-21 21:01:51

ANo.10

#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に反映します。

投稿日時 - 2004-06-16 19:45:36

お礼

ありがとうございます。
名前の定義、試してみます。

投稿日時 - 2004-06-21 20:54:07

ANo.9

#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の"="で判定できません。
その場合は数式では使わない文字に変更してください。

投稿日時 - 2004-06-16 16:04:27

お礼

たびたびありがとうございます。

投稿日時 - 2004-06-21 20:55:05

ANo.8

A3に

="=2-"&A1&"*"&A2

A4に

=2-A1*A2

面倒ですよ!

投稿日時 - 2004-06-16 16:01:38

お礼

どうもありがとうございます。
>面倒ですよ!
同感です。

投稿日時 - 2004-06-21 20:56:24

ANo.6

> 値の代入された計算式を見る方法なのです。

2-A1*A2
の式のうち、A1とA2の部分を置換すればよいのですが、簡単ではありません。

=2-SUM(A1:A2)
なんて関数が入った場合、数値に置換すると意味不明ですし、Aで始まるような関数が混じると、関数名、変数の判別さえ苦労します。

四則演算とカッコのみとか、条件付ならば、VBA等を駆使して計算式の文字列を作れる気もしますが、それでさえ結構難しいです。

投稿日時 - 2004-06-16 15:52:13

お礼

どうもありがとうございます。
VBAとか、私はできないもので。。。

投稿日時 - 2004-06-21 20:58:02

ANo.5

#4の追記です。
蛇足でしょうが、名前の定義を、
1.セル A4 をアクティブにした状態で =EVALUATE(A3) とすると、すべてのセルでその
  セルの一つ上のセルの文字数式を計算できます。
2.アクティブセル位置にかかわらず =EVALUATE($A$3) とすると、どのセルに =CALC
  と入れても、セル A3 の文字数式の結果が表示されます。

投稿日時 - 2004-06-16 15:50:42

ANo.4

名前定義を利用されるのも一つの方法です。

1.[挿入]-[名前] から、定義します。
   名  前: 適当に。ここでは CALC とします。
   参照範囲: =EVALUATE($A$3) と入力します。
2.セル A3 の書式を文字列にして、=2-A1*A2 と入力します。
3.セル A4 に =CALC と入力します。

セル A3 の数式を変更するだけで、自動的に計算します。

投稿日時 - 2004-06-16 15:40:57

ANo.3

A3とA4に同じ式を入れ、A3だけには、式の頭に'(シングルクォーテーション)を入れます。
'を入れると文字列とみなされるので、式が表示されます。
式が変わるときには、A3のセルをまるごとA4にコピーして'を取り去るだけでいいです。
色々方法はありますが、結構こんなのが一番簡単なんじゃないかと…

投稿日時 - 2004-06-16 15:21:07

お礼

そうですね。手っ取り早くやるには、これが一番ですね。
どうもありがとうございます。

投稿日時 - 2004-06-21 20:48:09

ANo.2

式を表示する場所(セル)が問題です。
右列同行と仮定して、(したがって使用全列について列挿入しておく必要あり)
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列)
1223
12=A1

69=C1*3
93=SUM(A1:A4)
1=MATCH(12,A1:A5,0)
と言うような結果です。

投稿日時 - 2004-06-16 15:08:12

お礼

imogasiさん、こんにちは。
試してみたのですが、確かに計算式は表示されましたが、私が知りたいのは、値の代入された計算式を見る方法なのです。
どうもありがとうございました。

投稿日時 - 2004-06-16 15:26:19

ANo.1

「ツール」「オプション」「表示」で「数式」にチェックすれば
結果でなく数式そのものが表示されます。
元に戻す場合は、チェックをはずしてください。

投稿日時 - 2004-06-16 14:58:02

お礼

mshr1962さん、こんにちは。
この方法ですと、確かに計算式は見られますが、私が知りたいのは、値の代入された計算式を見る方法なのです。
どうもありがとうございました。

投稿日時 - 2004-06-16 15:10:41

あなたにオススメの質問