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

解決済みの質問

Excelの式の表示について

Excelで下記のような状態で計算式を表示したいと考えております。

A1に=B1+C1、B1に2、C1に3とします。
するとA1に「5」と表示されます。
A2に計算の根拠がわかるように
「2+3」
と表示したいと考えて居ますが単純に手打ちですと個数が多くなると作業が大変ですので、関数やVBAマクロで可能でしたらご教授お願い致します。

*「オプション」や「Ctrl + Shift + @」を使用することでA1にA1の数式を表示する事が目的ではありませんので、ご了承のほどよろしくお願い致します。

投稿日時 - 2019-12-13 18:55:48

QNo.9689772

暇なときに回答ください

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

すみません、式の表示という文字だけに反応してしまいました。
単純な計算式だけでしたら以下のように。
式内に()があると駄目ですが・・・。
Function siki(Rng As Range)
Dim sFormula As String
Dim i As Long
Dim sSplit() As String, sSplit1() As String
Dim sTemp As String, sTemp1 As String
Dim mStr As String

sFormula = Mid(Rng.FormulaLocal, 2)
For i = 1 To Len(sFormula)
Select Case Mid(sFormula, i, 1)
Case "+", "-", "*", "/", "^"
sTemp1 = sTemp1 & Mid(sFormula, i, 1) & vbLf
sTemp = sTemp & vbLf
Case Else
sTemp = sTemp & Mid(sFormula, i, 1)
End Select
Next
sSplit = Split(sTemp, vbLf)
sSplit1 = Split(sTemp1, vbLf)

For i = 0 To UBound(sSplit)
If Range(sSplit(i)).Value = "" Then
mStr = mStr & 0 & sSplit1(i)
End If
mStr = mStr & Range(sSplit(i)).Value & sSplit1(i)
Next
siki = mStr
End Function

投稿日時 - 2019-12-13 21:15:03

補足

99%思惑通りの事ができました。
caseで四則演算で判断しているせいなのか数値のみの参照ですとvalueエラーがかえります。
この辺はなんとか修正してみたいと考えて居ます。

この度はありがとうございました。
先にお礼の方を早々に閉じてしまいましたので、こちらにて失礼します。

投稿日時 - 2019-12-13 21:34:09

お礼

早々のご回答ありがとうございます。
つたない説明で申し訳ありませんでした。

投稿日時 - 2019-12-13 22:31:34

ANo.3

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

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

回答(6)

ANo.6

度々の追加ですみません。
カッコがある場合以下のコードでいけると思います。


Function siki(Rng As Range) 'カッコあり
Dim sFormula As String
Dim i As Long
Dim sTemp As String
Dim mStr As String

sFormula = Mid(Rng.FormulaLocal, 2)
For i = 1 To Len(sFormula)
Select Case Mid(sFormula, i, 1)
Case "+", "-", "*", "/", "^", "(", ")"
If sTemp = "" Then
mStr = mStr & Mid(sFormula, i, 1)
ElseIf IsNumeric(sTemp) = True Then
mStr = mStr & sTemp & Mid(sFormula, i, 1)
sTemp = ""
ElseIf Range(sTemp).Value = "" Then
mStr = mStr & 0 & Mid(sFormula, i, 1)
sTemp = ""
Else
mStr = mStr & Range(sTemp).Value & Mid(sFormula, i, 1)
sTemp = ""
End If
Case Else
sTemp = sTemp & Mid(sFormula, i, 1)
End Select
Next
If sTemp <> "" Then
If IsNumeric(sTemp) = True Then
mStr = mStr & sTemp
ElseIf Range(sTemp).Value = "" Then
mStr = mStr & 0
Else
mStr = mStr & Range(sTemp).Value
End If
End If
siki = mStr
End Function

投稿日時 - 2019-12-15 12:02:30

ANo.5

数値がある場合には最後を以下のようにすればいけると思います。
For i = 0 To UBound(sSplit)
If IsNumeric(sSplit(i)) = True Then
mStr = mStr & sSplit(i) & sSplit1(i)
ElseIf Range(sSplit(i)).Value = "" Then
mStr = mStr & 0 & sSplit1(i)
Else
mStr = mStr & Range(sSplit(i)).Value & sSplit1(i)
End If

もとのコードも一部おかしかったです。

If Range(sSplit(i)).Value = "" Then
mStr = mStr & 0 & sSplit1(i)
End If
mStr = mStr & Range(sSplit(i)).Value & sSplit1(i)

は以下に訂正します。

If Range(sSplit(i)).Value = "" Then
mStr = mStr & 0 & sSplit1(i)
Else
mStr = mStr & Range(sSplit(i)).Value & sSplit1(i)
End If

投稿日時 - 2019-12-14 18:00:12

ANo.4

単純な四則演算の記号で結ばれた式なら、しこしこと割り出してやればできる気もする。
ーー
しかし=SUM(A1:A10)のような場合は、1+2+・・・+10のように表示せよということですか?
これは面倒。
Excel関数も多数あるので検討が大変。
関数で算出されたセルを用いて、計算している場合は、どこまで表現するのか。
値が日付の場合はどう表現するのか。
ーー
どういう発想でこういう質問をしたのか。OKWAVEにも、背景や目的を書かない質問が多いが、考える方は、徒労感を禁じ得ない。
余り意味がないように思う。
ーー
何しろVBAにおいて、質問に適した、使えそうな仕組みがないように思う。
Formulaは使えそうだが、.DirectDependentsを思ったが、使えそうでもない。

投稿日時 - 2019-12-13 21:41:21

お礼

貴重なご意見を頂きありがとうございます。
ご指摘はごむりごもっともであると痛感しております。
今後につなげさせて頂きます。

投稿日時 - 2019-12-13 22:31:43

ANo.2

VBAでしたら以下のような感じはいかがでしょう。
ユーザー定義関数で
(標準モジュールに)
Function siki(Rng As Range)
siki = Mid(Rng.Formula, 2)
End Function
にしてセルに=siki(A1)とか

実行するタイプでしたらA列の式をE列に表示します。
Sub Test()
Dim i As Long

For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
Cells(i, "E").Value = Mid(Cells(i, "A").Formula, 2)
Next
End Sub

投稿日時 - 2019-12-13 19:31:52

補足

試させて頂きましたが、A1に入力されている式そのものが表示されてしまいます。
A1が「=B1+C1」ですと実行後のセルは「B1+C1」になってしまいます。
このような形では無く実行後のセルに「2+3」と表示させたいと考えております。

投稿日時 - 2019-12-13 19:45:40

お礼

ご回答ありがとうございます。

投稿日時 - 2019-12-13 19:45:44

ANo.1

=FORMULATEXT(A1)
とかいかがですか。

投稿日時 - 2019-12-13 19:17:16

お礼

ご回答ありがとうございます。
確認させて頂きましたが、こちらの方法ですと「B1+C1」が表示されてしまい、意図する「2+3」にまなりませんでした。

投稿日時 - 2019-12-13 19:39:45

あなたにオススメの質問