Bisakah Excel menampilkan formula dan hasilnya secara bersamaan?

10

Saya tahu bahwa mungkin di Excel untuk beralih antara menampilkan nilai dan menampilkan rumus . Saya diminta untuk menyerahkan tugas untuk kelas statistik sebagai sheet Excel dicetak menunjukkan kedua rumus dan hasilnya. Saat ini instruktur membuat kami menyalin formula dan menempelkannya sebagai teks di sebelah nilai yang dihitung, atau menyalin nilai dan menempelkannya di sebelah formula. Ini sangat tidak efisien, rawan kesalahan (jika Anda mengubah rumus atau nilai setelah melakukan copy-paste), dan umumnya membuang-buang waktu.

Apakah ada cara agar Excel memperlihatkan rumus dan nilainya di sel yang sama? Jika tidak, apakah ada fungsi yang akan menampilkan rumus dari sel yang direferensikan sebagai teks biasa, misalnya =showformula(A1)yang akan mencetak =sum(A2:A5) alih-alih 25(jika itu adalah rumus dan nilai sel A1)?

Saya menggunakan Excel 2010, tetapi jawaban umum yang berfungsi untuk semua edisi Excel terbaru akan lebih baik.

berpikir
sumber

Jawaban:

18

Saya tidak mengetahui adanya fungsi bawaan untuk ini. Namun, Anda dapat membuat fungsi VB yang ditentukan pengguna untuk mencapai apa yang Anda inginkan.

Tekan Alt + F11 untuk membuka editor VBA, klik kanan di Project Explorer dan pilih Insert -> Module . Rekatkan kode berikut:

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

Sekarang Anda dapat menggunakan =GetFormula(A1)untuk menunjukkan rumus sel itu.

Indrek
sumber
Saya menggunakan rutin ini - Saya mendapatkan kesalahan Variabel tidak didefinisikan Apa yang harus menjadi deklarasi variabel untuk getformula?
Prasanna
@ Prasanna GetFormulabukan variabel, ini adalah fungsi. Versi Excel apa yang Anda gunakan?
Indrek
Excel 2013. Maafkan ketidaktahuan saya - saya sudah mulai belajar VBA
Prasanna
2

Inilah cara untuk mengotomatiskan apa yang Anda lakukan sebelumnya. Ini menggabungkan bagian terbaik dari jawaban LonelyKnight untuk pertanyaannya sendiri , jawaban Indrek, dan jawaban 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

Untuk setiap sel dalam rentang yang ditentukan (di sini diberi kode-keras A1:G5), ia menyalin rumus sel, dilindungi oleh tanda kutip, ke sel dengan offset tetap. (Lihat Bagaimana cara menambahkan VBA di MS Office? Untuk panduan tentang cara menggunakan VBA di Excel.) Anda hanya harus ingat untuk menjalankan makro ini sebelum Anda mencetak.

Atau, tambahkan PrintOut , , , Truepernyataan sebelumnya Exit Sub, dan makro ini akan mencetak lembar untuk Anda. (Anda hanya harus ingat untuk mencetak menggunakan makro ini .) Parameter keempat PrintOutadalah Preview , atur agar TrueMicrosoft Excel meminta pratinjau cetak sebelum mencetak lembar (sehingga memberi Anda pilihan untuk membatalkan) atau False(atau dihilangkan) untuk mencetak lembar segera, tanpa syarat.

Atau, jika Anda benar-benar khawatir tentang lupa menjalankan ini, Anda dapat menggunakan Private Sub Worksheet_Changeuntuk memperbarui formula yang dapat ditampilkan setiap kali Anda membuat perubahan apa pun di lembar kerja.

G-Man Mengatakan 'Pasang Kembali Monica'
sumber
2

Mungkin perlu dicatat bahwa pada Excel 2013, ada fungsi asli untuk ini: FORMULATEXT.

Dari dukungan dot office, artikel dot com tentang FORMULATEXTfungsi:

Deskripsi

Mengembalikan rumus sebagai string.

Sintaksis

FORMULATEXT (referensi)

Sintaks fungsi FORMULATEXT memiliki argumen berikut:

  • Referensi Diperlukan. Referensi ke sel atau rentang sel.

Catatan

  • Fungsi FORMULATEXT mengembalikan apa yang ditampilkan di bilah rumus jika Anda memilih sel yang dirujuk.
Alex M.
sumber
1
Bagus. Dibangun adalah cara untuk pergi. Tidak seperti solusi Indreks, ini menunjukkan kesalahan jika bidang bukan rumus, Anda dapat dengan mudah memeriksa sebelumnya dengan ini: = JIKA (ISFORMULA (B1); FORMULATEXT (B1); B1)
Peheje
0

Add-in gratis, FormulaDesk dapat melakukan ini untuk Anda, serta menampilkan rumus dengan cara yang lebih dimengerti dan menunjukkan kesalahan dalam rumus.

Seperti yang dapat Anda lihat pada tangkapan layar di bawah ini, Anda dapat melihat hasil akhir sel, dan formula asli, dan tampilan formula yang dapat dieksplorasi yang ditingkatkan secara bersamaan, seperti yang Anda tanyakan.

[Pengungkapan: Saya adalah penulis FormulaDesk]

masukkan deskripsi gambar di sini

Gareth Hayter
sumber
1
Terima kasih telah mengungkapkan afiliasi Anda. Sepertinya Anda memang memiliki kontribusi sebelumnya di Stack Exchange, yang bagus, tetapi saya sarankan membaca kembali kebijakan promosi mandiri hanya untuk aman. Anda tidak melakukan kesalahan, tetapi seringkali ketika pengguna melihat seseorang yang hanya menjawab di situs mempromosikan sesuatu yang mereka buat, mereka menandainya sebagai spam. Ini juga akan meningkatkan jawaban ini jika Anda dapat menyertakan tangkapan layar sebagai contoh. Terima kasih!
nhinkle
Terima kasih telah menunjukkan ini padaku. Saya telah mengedit jawaban saya untuk menjawab pertanyaan awal Anda dengan tepat.
Gareth Hayter
0

Saya tahu sedikit tentang pemrograman dan jawaban saya tidak elegan. Sebagai insinyur masa depan saya membutuhkan fungsi di Excel yang bisa menampilkan kepada saya formula. Masalah yang saya temukan dalam solusi Indrek adalah fungsinya mengembalikan kepada saya rumus seperti ini: "C9 * C9 * pi ()" dan saya ingin nama sel di tampilan rumus (C9) diubah menjadi nilai-nilai sel-sel itu; dan itu akan secara otomatis berubah setiap kali angka-angka itu diubah dalam sel C9 asli.

Semacam kode saya berfungsi dengan formula yang sangat dasar. Saya tidak pernah menemukan sesuatu seperti ini di tempat lain, Mungkin membantu seseorang atau tidak. Seseorang mungkin dapat meningkatkan ini ke tingkat yang layak. Seperti yang saya katakan, ini bekerja untuk saya dan saya adalah orang yang praktis dengan sedikit keterampilan dalam pemrograman.

Fungsi pertama bukan milikku sama sekali. Itu diambil dari:

/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
sumber
-2

Anda dapat membuat kolom tambahan yang berisi formula: = REPLACE (target_cell; 1; 1; "")

András
sumber
Tidak bekerja untuk saya.
tohuwawohu
Ini tidak akan berfungsi.
Alex M
-2

Inilah solusinya:

  1. Letakkan tanda kutip ( ') di awal rumus
  2. Salin ke baris di bawah atau kolom di sebelahnya
  3. Kembali ke rumus asli dan hapus tanda kutip

Ini bekerja.

Tagihan adalah
sumber
4
Ini membutuhkan menyalin ulang formula setiap kali Anda mengubahnya. Ketika sering mengganti spreadsheet, akan terlalu mudah bagi rumus yang disalin untuk tidak selaras dengan rumus sebenarnya.
nhinkle
Ini adalah keadaan pasti yang ingin diselesaikan oleh pertanyaan itu.
Alex M
-3

Menggabungkan teks dengan nilai Misalkan sel A1 berisi angka 9999

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

Formula ini akan menampilkan "Total: $ 9,999.00"

Contoh lain yang menggunakan fungsi SEKARANG untuk menampilkan teks dengan tanggal / waktu saat ini

="Report printed on: "&TEXT(NOW(),"mmmm d, yyyy at h:mm AM/PM")
mta
sumber
2
Kecuali saya salah paham dengan Anda, ini tidak ada hubungannya sama sekali dengan apa yang saya minta.
nhinkle