2012-12-04 2 views
5

Excel2003에서 매크로를 작성하여 통합 문서의 수식이있는 셀을 모두 찾아서 주소와 수식을 다른 시트의 두 열로 출력합니다.excel vba를 사용하여 셀의 수식을 텍스트로 변환

는 내가 잘 작동

Public Function ShowFormula(cell As Range) As String 

    ShowFormula = cell.Formula 

End Function 

를 사용하여 개별 셀의 수식을 표시 할 수 있습니다 알고 있지만, 나는 손으로 모든 셀을 찾아야하지 않았기 때문에, 나는 다음과 같은 매크로를 썼다 그것은 모든 셀 잘, 대신 텍스트로 공식을 표시하는 찾아 내게

Sub Macro2() 


Dim i As Integer 
Dim targetCells As Range 
Dim cell As Range 
Dim referenceRange As Range 
Dim thisSheet As Worksheet 

Set referenceRange = ActiveSheet.Range("CA1") 

With referenceRange 
    For Each thisSheet In ThisWorkbook.Sheets 
     If thisSheet.Index >= referenceRange.Parent.Index Then 
      Set targetCells = thisSheet.Cells.SpecialCells(xlCellTypeFormulas, 23) 
      For Each cell In targetCells 
       If cell.HasFormula Then 
        .Offset(i, 0).Value = thisSheet.Name 
        .Offset(i, 1).Value = cell.Address 
        .Offset(i, 2).Value = CStr(cell.Formula) 
        i = i + 1 
       End If 
      Next 
     End If 
    Next 
End With 

End Sub 

위해 그들 모두를 찾기 위해 목록 수식 결과를 표시합니다.

수식 대신 텍스트로 수식을 출력하려면 무엇이 누락 되었습니까?

답변

5

이 시도 : 또한

.Offset(i, 2).Value = "'" & CStr(cell.Formula) 

, 이것은 조금 더 빨리 일을 할 것입니다. 대신

For Each thisSheet In ThisWorkbook.Sheets 
    If thisSheet.Index >= referenceRange.Parent.Index Then 

의 일을 가속화하기위한 팁을위한

For j = referenceRange.Parent.Index to Sheets.Count 
    Set thisSheet = Sheets(j) 
+0

감사하십시오! 당신의 대답에 대한 빠른 질문. 이것이 작동하는 동안,'= A1 + B2 + C3 + ... '를 출력합니다. 나는 나중에 다른 수식으로 플러그인을 다시 계획하고 있는데이 경우 " '"을 제거해야합니다. 텍스트 형식을 강요하지 않고이를 수행 할 수있는 방법이 있습니까? 왜 매크로가 아닌 UDF에서 작동하는지 궁금합니다 ...? –

+0

" '"을 제거하는 것은'Right (s, Len (s) - 1) '이지만 사소한 것이지요. 수정되지 않은 수식을 붙여 넣기 전에 대상 셀의 형식을 텍스트로 설정하여 어떻게 진행되는지 볼 수 있습니다. –

+0

텍스트 서식 지정이 트릭을했습니다. 너무 단순하지만 아직 나에게 일어나지 않았다. (많은 감사! –