Excel สามารถแสดงสูตรและผลลัพธ์พร้อมกันได้หรือไม่


10

ฉันรู้ว่ามันเป็นไปได้ใน Excel เพื่อสลับระหว่างการแสดงค่าและการแสดงสูตร ฉันต้องเปิดการมอบหมายงานสำหรับคลาสสถิติเป็นแผ่นงาน Excel ที่พิมพ์ออกมาซึ่งแสดงทั้งสูตรและผลลัพธ์ ตอนนี้ผู้สอนทำให้เราคัดลอกสูตรและวางเป็นข้อความถัดจากค่าที่คำนวณหรือคัดลอกค่าแล้ววางไว้ถัดจากสูตร สิ่งนี้ไม่มีประสิทธิภาพมากมีแนวโน้มที่จะเกิดข้อผิดพลาด (ถ้าคุณเปลี่ยนสูตรหรือค่าหลังจากทำสำเนาวาง) และโดยทั่วไปจะเสียเวลา

มีวิธีใดที่ Excel จะแสดงสูตรและค่าในเซลล์เดียวกันหรือไม่ ถ้าไม่มีมีฟังก์ชั่นใดบ้างที่จะแสดงสูตรจากเซลล์ที่อ้างอิงเป็นข้อความธรรมดาเช่น=showformula(A1)ที่จะพิมพ์ออกมา=sum(A2:A5) แทน25(ถ้าเป็นสูตรและค่าของเซลล์A1)?

ฉันใช้ Excel 2010 แต่คำตอบทั่วไปที่ใช้ได้กับ Excel รุ่นใด ๆ ก็น่าจะดี

คำตอบ:


18

ฉันไม่ทราบถึงฟังก์ชั่นในตัวสำหรับสิ่งนี้ อย่างไรก็ตามคุณสามารถสร้างฟังก์ชั่น VB ที่ผู้ใช้กำหนดเองเพื่อบรรลุสิ่งที่คุณต้องการ

กดAlt + F11เพื่อเปิดตัวแก้ไข VBA คลิกขวาใน Explorer โครงการและเลือกInsert -> โมดูล วางรหัสต่อไปนี้:

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

ตอนนี้คุณสามารถใช้=GetFormula(A1)เพื่อแสดงสูตรของเซลล์นั้น


ฉันใช้รูทีนนี้ - ฉันได้รับข้อผิดพลาดตัวแปรไม่ได้กำหนดสิ่งที่ควรเป็นการประกาศตัวแปรสำหรับ getformula?
Prasanna

@rasanna GetFormulaไม่ใช่ตัวแปรมันเป็นฟังก์ชั่น คุณใช้ Excel รุ่นใด
Indrek

Excel 2013 แก้ตัวความไม่รู้ของฉัน - ฉันได้เริ่มเรียนรู้ VBA
Prasanna

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) มันคัดลอกสูตรของเซลล์ที่ได้รับการป้องกันโดยเครื่องหมายอัญประกาศเดี่ยวไปยังเซลล์ที่มีการชดเชยตรงไปตรงมา (ดูที่ฉันจะเพิ่ม VBA ใน MS Office ได้อย่างไร สำหรับคำแนะนำเกี่ยวกับการใช้ VBA ใน Excel) คุณต้องจำไว้ว่าให้เรียกใช้แมโครนี้ก่อนที่จะพิมพ์

หรือเพิ่มPrintOut , , , Trueคำสั่งก่อนหน้าExit Subนี้และแมโครนี้จะพิมพ์แผ่นงานให้คุณ (คุณเพียงแค่ต้องจำไว้ในการพิมพ์โดยใช้แมโครนี้ .) พารามิเตอร์สี่เพื่อPrintOutเป็นตัวอย่างก่อนตั้งเพื่อTrueที่จะมีโปรแกรม Microsoft Excel วิงวอนขอตัวอย่างก่อนพิมพ์ก่อนที่จะพิมพ์แผ่น (จึงให้คุณเลือกที่จะยกเลิก) หรือFalse(หรือละเว้น) ในการพิมพ์ แผ่นงานทันทีโดยไม่มีเงื่อนไข

หรือถ้าคุณกังวลเกี่ยวกับการลืมที่จะเรียกใช้คุณสามารถใช้Private Sub Worksheet_Changeเพื่ออัปเดตสูตรที่แสดงได้ทุกเวลาที่คุณทำการเปลี่ยนแปลงใด ๆในแผ่นงาน


2

บางทีอาจจะเป็นที่น่าสังเกตว่าเป็นของ Excel 2013 FORMULATEXTมีฟังก์ชั่นพื้นเมืองนี้:

จากบทความสนับสนุน dot office dot com บนFORMULATEXTฟังก์ชั่น:

ลักษณะ

ส่งคืนสูตรเป็นสตริง

วากยสัมพันธ์

FORMULATEXT (อ้างอิง)

ไวยากรณ์ของฟังก์ชัน FORMULATEXT มีอาร์กิวเมนต์ดังนี้

  • จำเป็นต้องมีการอ้างอิง การอ้างอิงไปยังเซลล์หรือช่วงของเซลล์

หมายเหตุ

  • ฟังก์ชัน FORMULATEXT ส่งคืนสิ่งที่แสดงในแถบสูตรถ้าคุณเลือกเซลล์ที่อ้างอิง

1
ดี ในตัวเป็นวิธีที่จะไป ซึ่งแตกต่างจากวิธีแก้ปัญหา Indreks นี้แสดงข้อผิดพลาดถ้าเขตข้อมูลไม่ได้เป็นสูตรคุณสามารถตรวจสอบได้อย่างง่ายดายก่อนด้วย: = IF (ISFORMULA (B1); FORMULATEXT (B1); B1)
Peheje

1

ทางเลือกอื่นอาจใช้ LibreOffice

มีการขยายการตั้งชื่อเป็นสูตรการแสดงผลและราคาพร้อมกัน มันควรทำสิ่งที่คุณต้องการ


0

FormulaDeskฟรีแบบฟรีสามารถทำเพื่อคุณได้เช่นเดียวกับการแสดงสูตรในวิธีที่เข้าใจได้ง่ายขึ้นและระบุข้อผิดพลาดในสูตร

ดังที่คุณเห็นในภาพหน้าจอด้านล่างคุณสามารถดูผลลัพธ์สุดท้ายของเซลล์และสูตรดั้งเดิมและการแสดงผลที่ละเอียดมากขึ้นของสูตรพร้อมกันตามที่คุณถาม

[การเปิดเผยข้อมูล: ฉันเป็นผู้แต่ง FormulaDesk]

ป้อนคำอธิบายรูปภาพที่นี่


1
ขอบคุณสำหรับการเปิดเผยความร่วมมือของคุณ ดูเหมือนคุณมีส่วนร่วมก่อนหน้านี้ใน Exchange Exchange ซึ่งดีมาก แต่ฉันขอแนะนำให้อ่านนโยบายการส่งเสริมตนเองใหม่อีกครั้งเพื่อความปลอดภัย คุณไม่ได้ทำอะไรผิด แต่บ่อยครั้งที่ผู้ใช้เห็นใครบางคนที่มีเพียงคำตอบในไซต์กำลังโปรโมตสิ่งที่พวกเขาทำพวกเขาตั้งค่าสถานะว่าเป็นสแปม นอกจากนี้ยังจะปรับปรุงคำตอบนี้หากคุณสามารถใส่ภาพหน้าจอเป็นตัวอย่าง ขอบคุณ!
nhinkle

ขอบคุณสำหรับการชี้ให้ฉันเห็น ฉันได้แก้ไขคำตอบเพื่อตอบคำถามเดิมของคุณอย่างแน่นอน
Gareth Hayter

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

คุณสามารถสร้างคอลัมน์เพิ่มเติมที่มีสูตร: = REPLACE (target_cell; 1; 1; "")


ไม่ได้ผลสำหรับฉัน
tohuwawohu

สิ่งนี้จะไม่ทำงาน
Alex M

-2

นี่คือทางออก:

  1. ใส่เครื่องหมายอะโพสโทรฟี ( ') ที่จุดเริ่มต้นของสูตร
  2. คัดลอกไปยังแถวด้านล่างหรือคอลัมน์ข้าง
  3. กลับไปที่สูตรดั้งเดิมและลบเครื่องหมายอะโพสโทรฟี

วิธีนี้ใช้ได้ผล


4
ต้องมีการคัดลอกสูตรใหม่ทุกครั้งที่คุณเปลี่ยน เมื่อเปลี่ยนสเปรดชีตบ่อยครั้งมันจะง่ายเกินไปที่สูตรที่คัดลอกจะไม่ซิงค์กับสูตรจริง
nhinkle

นี่เป็นสถานการณ์ที่แน่นอนที่คำถามกำลังพยายามแก้ไข
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
ถ้าฉันไม่เข้าใจคุณผิดนี่ไม่มีอะไรเกี่ยวข้องกับสิ่งที่ฉันขอ
พฤศจิกายน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.