Excelは数式とその結果を同時に表示できますか?


10

Excelでは、値の表示と数式の表示を切り替えることができることを知っています。統計クラスの割り当てを、数式と結果の両方を示す印刷されたExcelシートとして提出する必要があります。現在、インストラクターは、数式をコピーして計算値の横にテキストとして貼り付けるか、値をコピーして数式の横に貼り付けます。これは非常に非効率的で、エラーが発生しやすく(コピーと貼り付けを行った後で数式または値を変更した場合)、一般に時間の無駄になります。

Excelに数式その値を同じセルに表示させる方法はありますか?そうでない場合、参照されたセルからの数式をプレーンテキストとして表示する関数はありますか(たとえば、数式とセルの値の場合)の 代わりに=showformula(A1)出力されますか?=sum(A2:A5)25A1

私はExcel 2010を使用していますが、最近のバージョンのExcelで機能する一般的な答えがいいでしょう。

回答:


18

このための組み込み関数は知りません。ただし、ユーザー定義のVB関数を作成して、目的を達成することができます。

押してAltキー+ F11は、VBAエディタを開き、プロジェクトエクスプローラで右クリックして選択し、挿入を > - モジュール。次のコードを貼り付けます。

Function GetFormula(cell)  
  GetFormula = cell.Formula  
End Function

これでを使用=GetFormula(A1)して、そのセルの数式を表示できます。


このルーチンを使用しました-エラーが発生します変数が定義されていません getformulaの変数宣言は何ですか?
Prasanna 2015

@Prasanna GetFormulaは変数ではなく、関数です。どのバージョンのExcelを使用していますか?
Indrek

Excel2013。無知です
。VBAの

2

これは、以前に行っていた作業を自動化する方法です。自分の質問に対するLonelyKnightの回答、Indrekの回答、およびBillisの回答の最良の部分を組み合わせています。

Sub Show_Formulas()
    Dim rng As Range, cell As Range
    row_offset = 10
    col_offset = 0
    Set rng = Range(Cells(1, 1), Cells(5, 7))

    On Error GoTo ErrHandler
    For Each cell In rng
        cell.Offset(row_offset, col_offset) = "'" & cell.Formula
    Next cell
    Exit Sub

ErrHandler:
    MsgBox "The cow jumped over the moon", , "Error!", Err.HelpFile, Err.HelpContext

End Sub

指定された範囲内のすべてのセル(ここではとしてハードコードA1:G5されています)に対して、アポストロフィで保護されたセルの数式を、固定オフセットでセルにコピーします。( ExcelでVBAを使用する方法については、MS OfficeにVBAを追加する方法を参照してください。)印刷する前に、このマクロを実行することを忘れないでください。

または、のPrintOut , , , True直前にステートメントを追加するExit Subと、このマクロによってシートが印刷されます。(このマクロを使用して印刷することを覚えておく必要があります。)の4番目のパラメータPrintOutPreviewTrue、シートを印刷する前にMicrosoft Excelが印刷プレビューを呼び出すように設定されているため(キャンセルするオプションが提供されます)、またはFalse(または省略されて)印刷されます。無条件ですぐにシート。

それとも、あなたが本当にこれを実行するのを忘れる心配している場合は、使用することができますPrivate Sub Worksheet_Change表示式にあなたが作る任意の時間に更新するために任意のワークシートの変化を。


2

Excel 2013の時点で、これにはネイティブ関数があることに注意してくださいFORMULATEXT

FORMULATEXT機能に関するサポートドットオフィスドットコムの記事から:

説明文

式を文字列として返します。

構文

FORMULATEXT(参照)

FORMULATEXT関数の書式には、次の引数があります。

  • 参照が 必要です。セルまたはセル範囲への参照。

備考

  • FORMULATEXT関数は、参照先のセルを選択した場合、数式バーに表示されているものを返します。

1
いいね。組み込みは行く方法です。Indreksソリューションとは異なり、フィールドが数式でない場合、これはエラーを示します。これを使用すると、前に簡単に確認できます。= IF(ISFORMULA(B1); FORMULATEXT(B1); B1)
Peheje

1

別の方法として、LibreOfficeを使用することもできます。

Display FormulaとValueという名前の拡張があります。それはあなたが必要なことをするはずです。


0

無料のアドインであるFormulaDeskを使用すると、数式をわかりやすく表示したり、数式のエラーを特定したりできます。

下のスクリーンショットでわかるように、セルの最終結果、元の数式、および数式の拡張された探索可能な表示を同時に確認できます。

[開示:私はFormulaDeskの作成者です]

ここに画像の説明を入力してください


1
所属を開示していただきありがとうございます。Stack Exchangeで以前に貢献したことがあるようですが、これは素晴らしいことですが、念のため、セルフプロモーションポリシーをもう一度読むことをお勧めします。あなたは何も悪いことをしていませんが、多くの場合、ユーザーがサイト上の唯一の回答が自分の作ったものを宣伝している誰かを見るとき、彼らはそれをスパムとして報告します。例としてスクリーンショットを含めることができれば、この回答も改善されます。ありがとう!
nhinkle 2014

これを私に指摘してくれてありがとう。元の質問に正確に回答するように回答を編集しました。
Gareth Hayter、2014

0

私はプログラミングについてはほとんど知りませんが、私の答えはエレガントではありません。将来のエンジニアとして、数式を表示できるExcelの関数が必要でした。Indrekソリューションで見つけた問題は、彼の関数が「C9 * C9 * pi()」のような式を私に返すことであり、式(C9)の表示でセルの名前をそれらの細胞; 元のC9セルでこれらの数値が変更されると、自動的に変更されます。

私のコードは非常に基本的な数式で動作します。私はどこにもこのようなものを見つけたことはありません、それは誰かを助けるかどうかにかかわらずかもしれません。誰かがこれをまともなレベルに改善できるかもしれません。私が言ったように、それは私のために働き、私はプログラミングのスキルがほとんどない実用的な男です。

最初の機能は私のものではありません。次から取得されました:

/programming/10951687/how-to-search-for-string-in-an-array

Function IsInArray(ar, item$) As Boolean
    Dim delimiter$, list$

    ' Chr(7) is the ASCII 'Bell' Character.
    ' It was chosen for being unlikely to be found in a normal array.
    delimiter = Chr(7)

    ' Create a list string containing all the items in the array separated by the delimiter.
    list = delimiter & Join(ar, delimiter) & delimiter

    IsInArray = InStr(list, delimiter & item & delimiter) > 0
End Function

Function GETFORMULA(cell)

Dim alfabeto As String
Dim alfabetos() As String
Dim formula As String
Dim celda As String
Dim cutter As String
Dim cutterarray() As String


'The formula is taken from the cell
formula = cell.formula


'And alphabet is declared to be compared with the formula
alfabeto = "A,B,C,D,E,F,G,H,I,J,K,L,M,O,P,Q,R,S,T,U,V,W,X,Y,Z"


'An array is declared with the elements of the alphabet string
alfabetos = Split(alfabeto, ",")


'Replacing common functions with a symbol, otherwise the code will crash
formula = Replace(formula, "LOG", "#")
formula = Replace(formula, "SQRT", "?")
formula = Replace(formula, "PI", "ñ")

'MsgBox (formula)
Debug.Print formula

'Symbols to identify where the name of a cell might end are declared
cutter = "*,/,+,-,^,(,)"

'An array is declared with the symbols from the string that has been just declared
cutterarray = Split(cutter, ",")

Dim nuevaformula As String


'For the i position in the lenght of the formula
Dim index As Integer

For i = 1 To Len(formula)
    Debug.Print "Para i iterativo=", i
    Debug.Print "Se tiene el digito", Mid(formula, i, 1)



        'if the i element is not a letter, then add it to the chain of characters
        If IsInArray(alfabetos, Mid(formula, i, 1)) = False Then
        Debug.Print "Que es un numero"
        nuevaformula = nuevaformula + Mid(formula, i, 1)
        Debug.Print nuevaformula


        'if the element is a letter, then it´s necessary to get the name of the cell, found all the numbers
        'of the cell until a symbol to cut appears, like a: "*","/","+","-"
        Else
        Debug.Print "Encontramos una letra"
        'Empezamos a buscar más números
        'Numbers in the cell name are going to be find to isolate the cell number

            For s = 2 To 7
            celda = Mid(formula, i, s)
            Debug.Print "Incrementamos una posición quedando", celda

                If (i + s - 1 = Len(formula)) = False Then



                    'if a symbol to cut is not found in the last increment the last number hasn´t been reached
                    'and it´s necessary to keep loking for it
                    If IsInArray(cutterarray, Right(celda, 1)) = False Then
                    celda = Mid(formula, i, s)
                    Debug.Print "En el incremento no se encontró cutter. La i correcta es", i + s - 1


                    Else

                    'if it´s found the name of the cell is
                    celda = Mid(formula, i, s - 1)
                    Debug.Print "Se encontró un cutter la celda es", celda

                    'the search cycle has to be broken
                    Debug.Print s, i
                    i = i + s - 2
                    Debug.Print "Daremos salto a i=", i
                    Debug.Print celda
                    nuevaformula = nuevaformula + CStr(Range(celda).Value)
                    Exit For
                    End If
                Else
                Debug.Print "se alcanzó la máxima cantidad de iteraciones posibles"
                celda = Mid(formula, i, s)
                Debug.Print "La celda encontrada fue", celda
                nuevaformula = nuevaformula + CStr(Range(celda).Value)
                Debug.Print nuevaformula
                nuevaformula = Replace(nuevaformula, "#", "LOG10")
                nuevaformula = Replace(nuevaformula, "?", "raiz")
                nuevaformula = Replace(nuevaformula, "ñ", "pi")
                ISAAC = nuevaformula
                Debug.Print (nuevaformula)
                Exit Function
                End If


            'MsgBox (nuevaformula)
            Next s
        End If
Next i

nuevaformula = Replace(nuevaformula, "#", "LOG10")
nuevaformula = Replace(nuevaformula, "?", "raiz")
nuevaformula = Replace(nuevaformula, "ñ", "pi")

GETFORMULA = nuevaformula
Debug.Print (nuevaformula)
End Function


-2

これが解決策です:

  1. '数式の先頭にアポストロフィ()を 置きます
  2. 下の行または横の列にコピーします
  3. 元の数式に戻り、アポストロフィを削除します

これは機能します。


4
これには、変更するたびに数式を再コピーする必要があります。スプレッドシートを頻繁に変更すると、コピーされた数式が実際の数式と同期しなくなるのは簡単です。
nhinkle 2014年

これは、質問が解決しようとしている問題の正確な状態です。
Alex M

-3

テキストと値を組み合わせるセルA1に数値9999が含まれているとします。

="Total: "&TEXT(A1,"$#,##0.00")

この数式は「合計:$ 9,999.00」を表示します

NOW関数を使用して現在の日付/時刻のテキストを表示する別の例

="Report printed on: "&TEXT(NOW(),"mmmm d, yyyy at h:mm AM/PM")

2
私があなたを誤解していない限り、これは私が求めていることとは何の関係もありません。
nhinkle 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.