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

@Prasanna 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)의 모든 셀에 대해 아포스트로피로 보호 된 셀의 수식을 고정 오프셋 떨어져있는 셀에 복사합니다. Excel에서 VBA를 사용하는 방법에 대한 지침 은 MS Office에서 VBA를 추가하는 방법을 참조하십시오 . 인쇄하기 전에이 매크로를 실행해야합니다.

또는 PrintOut , , , True바로 앞에 문을 추가하면 Exit Sub이 매크로가 시트를 인쇄합니다. ( 이 매크로를 사용하여 인쇄 하는 것을 기억해야합니다 .) 네 번째 매개 변수 PrintOutPreview 이며, True시트를 인쇄하기 전에 Microsoft Excel에서 인쇄 미리보기를 호출하도록 설정 되어 있습니다 (따라서 취소 옵션을 제공함 False). 무조건 즉시 시트.

당신은 정말이 실행 잊고에 대해 우려하는 경우 또는, 당신이 사용할 수있는 Private Sub Worksheet_Change표시 가능한 공식이 만들어 언제든지 업데이트 할 수 있는 워크 시트의 변화를.


2

Excel 2013부터는 다음과 같은 기본 기능이 FORMULATEXT있습니다.

기능에 대한 지원 도트 오피스 닷컴 기사에서 FORMULATEXT:

기술

수식을 문자열로 반환합니다.

통사론

공식 (참조)

FORMULATEXT 함수 구문에는 다음과 같은 인수가 사용됩니다.

  • 참조 필요 셀 또는 셀 범위에 대한 참조입니다.

비고

  • FORMULATEXT 함수는 참조 된 셀을 선택하면 수식 입력 줄에 표시되는 내용을 반환합니다.

1
좋은. 내장되어 있습니다. Indreks 솔루션과 달리 필드가 수식이 아닌 경우 오류가 표시되므로 다음을 통해 쉽게 확인할 수 있습니다. = IF (ISFORMULA (B1); FORMULATEXT (B1); B1)
Peheje


0

무료 추가 기능인 FormulaDesk가이 를 수행 할 수있을뿐만 아니라 공식을보다 이해하기 쉬운 방식으로 표시하고 공식의 오류를 정확하게 찾을 수 있습니다.

아래 스크린 샷에서 볼 수 있듯이 요청 한대로 셀의 최종 결과와 원래 수식 및 향상된 수식 표시를 동시에 볼 수 있습니다.

[공개 : 저는 FormulaDesk의 저자입니다]

여기에 이미지 설명을 입력하십시오


1
제휴를 공개해 주셔서 감사합니다. Stack 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

해결책은 다음과 같습니다.

  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
내가 당신을 오해하지 않는 한, 이것은 내가 요구하는 것과 전혀 관련이 없습니다.
nhinkle
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.