Kann Excel eine Formel und ihr Ergebnis gleichzeitig anzeigen?

10

Ich weiß, dass es in Excel möglich ist, zwischen der Anzeige von Werten und der Anzeige von Formeln umzuschalten . Ich muss Aufgaben für eine Statistikklasse als gedruckte Excel-Tabelle einreichen, die sowohl die Formel als auch das Ergebnis enthält. Im Moment lässt uns der Kursleiter entweder die Formel kopieren und als Text neben dem berechneten Wert einfügen oder den Wert kopieren und neben der Formel einfügen. Dies ist sehr ineffizient, fehleranfällig (wenn Sie die Formel oder Werte nach dem Kopieren und Einfügen ändern) und im Allgemeinen Zeitverschwendung.

Gibt es eine Möglichkeit, Excel die Formel und ihren Wert in derselben Zelle anzeigen zu lassen? Wenn nicht, gibt es eine Funktion, die die Formel aus einer Zelle, auf =showformula(A1)die verwiesen wird, als einfachen Text anzeigt, z. B. die =sum(A2:A5) anstelle von gedruckt wird 25(wenn dies die Formel und der Wert der Zelle wären A1)?

Ich verwende Excel 2010, aber eine allgemeine Antwort, die für jede neuere Ausgabe von Excel funktioniert, wäre hilfreich.

nhinkle
quelle

Antworten:

18

Mir sind keine eingebauten Funktionen dafür bekannt. Sie können jedoch eine benutzerdefinierte VB-Funktion erstellen, um das zu erreichen, was Sie möchten.

Drücken Sie Alt + F11 , um den VBA-Editor zu öffnen, klicken Sie mit der rechten Maustaste in den Projektexplorer und wählen Sie Einfügen -> Modul . Fügen Sie den folgenden Code ein:

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

Jetzt können Sie =GetFormula(A1)die Formel dieser Zelle anzeigen.

Indrek
quelle
Ich habe diese Routine verwendet - ich erhalte einen Fehler Variable nicht definiert Was sollte die Variablendeklaration für getformula sein?
Prasanna
@Prasanna GetFormulaist keine Variable, es ist eine Funktion. Welche Excel-Version verwenden Sie?
Indrek
Excel 2013. Entschuldigen Sie meine Unwissenheit - ich habe angefangen, VBA zu lernen
Prasanna
2

Hier ist eine Möglichkeit, das zu automatisieren, was Sie zuvor getan haben. Es kombiniert die besten Teile der Antwort von LonelyKnight auf seine eigene Frage , die Antwort von Indrek und die Antwort von 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

Für jede Zelle im angegebenen Bereich (hier fest codiert als A1:G5) wird die durch ein Apostroph geschützte Formel der Zelle in eine Zelle kopiert, die einen festen Versatz entfernt ist. (Weitere Informationen zur Verwendung von VBA in Excel finden Sie unter Wie füge ich VBA in MS Office hinzu? ) Sie müssen nur daran denken, dieses Makro auszuführen, bevor Sie drucken.

Oder fügen Sie PrintOut , , , Truekurz zuvor eine Anweisung hinzu Exit Sub, und dieses Makro druckt das Blatt für Sie. (Sie müssen nur daran denken, mit diesem Makro zu drucken .) Der vierte Parameter PrintOutist Vorschau . Hiermit Truesoll Microsoft Excel die Druckvorschau aufrufen, bevor das Blatt gedruckt wird (sodass Sie die Option zum Abbrechen haben) oder False(oder weggelassen), um das Blatt zu drucken Blatt sofort, bedingungslos.

Oder, wenn Sie wirklich sind besorgt darüber laufen zu vergessen, können Sie Private Sub Worksheet_Changedie darstellbaren Formeln jederzeit Sie machen zu aktualisieren , um jede Änderung in dem Arbeitsblatt.

G-Man sagt "Reinstate Monica"
quelle
2

Vielleicht ist es erwähnenswert, dass es ab Excel 2013 eine native Funktion dafür gibt : FORMULATEXT.

Aus dem Support Dot Office Dot Com Artikel über die FORMULATEXTFunktion:

Beschreibung

Gibt eine Formel als Zeichenfolge zurück.

Syntax

FORMULATEXT (Referenz)

Die Syntax der FORMULATEXT-Funktion enthält die folgenden Argumente:

  • Referenz erforderlich. Ein Verweis auf eine Zelle oder einen Zellbereich.

Bemerkungen

  • Die Funktion FORMULATEXT gibt zurück, was in der Formelleiste angezeigt wird, wenn Sie die referenzierte Zelle auswählen.
Alex M.
quelle
1
Nett. Eingebaut ist der Weg zu gehen. Im Gegensatz zur Indreks-Lösung zeigt dies einen Fehler an, wenn das Feld keine Formel ist. Sie können dies vorher leicht überprüfen: = IF (ISFORMULA (B1); FORMULATEXT (B1); B1)
Peheje
1

Eine Alternative könnte die Verwendung von LibreOffice sein.

Es gibt eine Erweiterung mit dem Namen Formel und Wert gleichzeitig anzeigen . Es sollte tun, was Sie brauchen.

denden
quelle
0

Das kostenlose Add-In FormulaDesk kann dies für Sie tun sowie die Formel verständlicher anzeigen und Fehler in der Formel lokalisieren.

Wie Sie im folgenden Screenshot sehen können, können Sie das Endergebnis der Zelle und die Originalformel sowie die verbesserte explorierbare Anzeige der Formel gleichzeitig anzeigen, wie Sie gefragt haben.

[Offenlegung: Ich bin der Autor von FormulaDesk]

Geben Sie hier die Bildbeschreibung ein

Gareth Hayter
quelle
1
Vielen Dank für die Offenlegung Ihrer Zugehörigkeit. Es sieht so aus, als hätten Sie bereits frühere Beiträge zu Stack Exchange, was großartig ist, aber ich würde vorschlagen, die Richtlinien zur Eigenwerbung erneut zu lesen , um sicher zu gehen. Sie haben nichts falsch gemacht, aber wenn Benutzer jemanden sehen, dessen einzige Antwort auf der Website darin besteht, für etwas zu werben, das sie gemacht haben, kennzeichnen sie es häufig als Spam. Es würde diese Antwort auch verbessern, wenn Sie einen Screenshot als Beispiel hinzufügen könnten. Vielen Dank!
nhinkle
Vielen Dank, dass Sie mich darauf hingewiesen haben. Ich habe meine Antwort bearbeitet, um Ihre ursprüngliche Frage genau zu beantworten.
Gareth Hayter
0

Ich weiß sehr wenig über Programmierung und meine Antwort ist nicht elegant. Als zukünftiger Ingenieur brauchte ich eine Funktion in Excel, die mir die Formel anzeigen konnte. Das Problem, das ich in der Indrek-Lösung gefunden habe, ist, dass seine Funktion mir eine Formel wie die folgende zurückgibt: "C9 * C9 * pi ()" und ich wollte, dass die Namen der Zellen in der Anzeige der Formel (C9) in die Werte von geändert werden diese Zellen; und das würde sich automatisch ändern, wenn diese Nummern in der ursprünglichen C9-Zelle geändert werden.

Mein Code funktioniert mit sehr einfachen Formeln. Ich habe so etwas nirgendwo anders gefunden. Es könnte jemandem helfen oder nicht. Jemand könnte dies auf ein anständiges Niveau verbessern. Wie gesagt, es funktioniert bei mir und ich bin ein praktischer Typ mit geringen Programmierkenntnissen.

Die erste Funktion gehört mir überhaupt nicht. Es wurde abgerufen von:

/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
ISAAC DELGADO
quelle
-2

Sie können eine zusätzliche Spalte erstellen, die die folgenden Formeln enthält: = REPLACE (target_cell; 1; 1; "")

András
quelle
Funktioniert bei mir nicht
tohuwawohu
Dies wird nicht funktionieren.
Alex M
-2

Hier ist eine Lösung:

  1. Setzen Sie ein Apostroph ( ') an den Anfang der Formel
  2. Kopieren Sie es in die Zeile darunter oder in die Spalte daneben
  3. Kehren Sie zur ursprünglichen Formel zurück und entfernen Sie den Apostroph

Das funktioniert.

Die Rechnung ist
quelle
4
Dies erfordert ein erneutes Kopieren der Formel bei jeder Änderung. Wenn Sie eine Tabelle häufig ändern, ist es für die kopierten Formeln zu einfach, nicht mehr mit den tatsächlichen Formeln synchron zu sein.
nhinkle
Dies ist der genaue Stand der Dinge, den die Frage zu lösen versucht.
Alex M
-3

Text mit einem Wert kombinieren Angenommen, Zelle A1 enthält die Nummer 9999

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

Diese Formel zeigt "Gesamt: 9.999,00 USD" an.

Ein weiteres Beispiel, das die NOW-Funktion verwendet, um Text mit dem aktuellen Datum / der aktuellen Uhrzeit anzuzeigen

="Report printed on: "&TEXT(NOW(),"mmmm d, yyyy at h:mm AM/PM")
mta
quelle
2
Wenn ich Sie nicht missverstehe, hat dies überhaupt nichts mit dem zu tun, was ich verlange.
nhinkle