Tim은 상당히 큰 통합 문서를 가지고 있으며, 통합 문서의 다양한 수식에서 함수가 사용되는 “인벤토리”와 해당 함수가 사용되는 셀을 수행하는 방법이 있는지 궁금합니다.

이 작업은 처음에는 보일 수 있지만 조금 더 어렵습니다. Excel 함수를 구성하는 요소에 대해 몇 가지 규칙을 만들 수 있지만 이러한 규칙은 약간 힌트를받을 수 있습니다. 예를 들어, 함수가 대문자 단어와 여는 괄호로 정의된다고 생각할 수 있습니다. 그러나 함수 이름이 이제 마침표를 포함 할 수 있기 때문에 한동안 사실이 아닙니다.

함수 인벤토리를 얻는 가장 쉬운 방법은 통합 문서의 각 워크 시트에있는 각 수식을 살펴보고 가능한 모든 워크 시트 함수에 대해 해당 수식을 확인하는 매크로를 개발하는 것입니다. 다음 매크로는이를 잘 수행합니다.

Sub FormulaInventory()

Dim EFunc(500) As String     Dim iEFCnt As Integer     Dim sFile As String     Dim sTemp As String     Dim SourceBook As Workbook     Dim TargetBook As Workbook     Dim TargetSheet As Worksheet     Dim w As Worksheet     Dim c As Range     Dim iRow As Integer     Dim J As Integer     Dim K As Integer     Dim L As Integer

' Read functions from text file     sFile = ActiveWorkbook.Path & "\ExcelFunctions.txt"

iEFCnt = 0     Open sFile For Input As #1     While Not EOF(1)

Line Input #1, sTemp         sTemp = Trim(sTemp)

If sTemp > "" Then             iEFCnt = iEFCnt + 1             EFunc(iEFCnt) = sTemp & "("

End If     Wend     Close #1

' Sort functions; longest to shortest     For J = 1 To iEFCnt - 1         L = J         For K = J + 1 To iEFCnt             If Len(EFunc(L)) < Len(EFunc(K)) Then L = K         Next K         If L <> J Then             sTemp = EFunc(J)

EFunc(J) = EFunc(L)

EFunc(L) = sTemp         End If     Next J

' Create and setup new workbook     Set SourceBook = ActiveWorkbook     Set TargetBook = Workbooks.Add     Set TargetSheet = TargetBook.Worksheets.Add     TargetSheet.Name = "Inventory"

TargetSheet.Cells(1, 1) = "Function Inventory for " & SourceBook.Name     TargetSheet.Cells(3, 1) = "Function"

TargetSheet.Cells(3, 2) = "Worksheet"

TargetSheet.Cells(3, 3) = "Cell"

TargetSheet.Range("A1").Font.Bold = True     TargetSheet.Range("A3:C3").Font.Bold = True     With TargetSheet.Range("A3:C3").Cells.Borders(xlEdgeBottom)

.LineStyle = xlContinuous         .Weight = xlThin     End With

' Perform actual inventory     iRow = 4     For Each w In SourceBook.Worksheets         For Each c In w.Cells.SpecialCells(xlCellTypeFormulas)

sTemp = c.Formula             For J = 1 To iEFCnt                 If InStr(sTemp, EFunc(J)) Then                     TargetSheet.Cells(iRow, 1) = Left(EFunc(J), Len(EFunc(J)) - 1)

TargetSheet.Cells(iRow, 2) = w.Name                     TargetSheet.Cells(iRow, 3) = Replace(c.Address, "$", "")

iRow = iRow + 1                     sTemp = Replace(sTemp, EFunc(J), "")

End If             Next J         Next c     Next w End Sub

매크로를주의 깊게 살펴보면 Excel의 모든 워크 시트 함수 목록이 포함 된 텍스트 파일 (ExcelFunctions.txt)을 읽는다는 것을 알 수 있습니다. 이 파일은`link : /excelribbon-ExcelFunctions.txt [이 링크를 사용하여 다운로드]`일 수 있으며 분석중인 통합 문서와 동일한 폴더에 저장되어야합니다. (즉, 분석중인 통합 문서가 이미 폴더에 저장되어 있어야합니다.)

워크 시트 함수 이름이 텍스트 파일에서로드되면 매크로는 각 이름에 여는 괄호를 추가합니다. 이러한 이름은 배열에 저장되고이 배열은 배열의 시작 부분에 가장 긴 함수 이름을 사용하여 함수 이름의 길이에 따라 정렬됩니다. 이것은 함수 이름의 일부 모호성 때문에 수행됩니다. 예를 들어, function-name 배열을 읽을 때 LEFT (라는 이름의 함수와 T (라는 이름의 다른 함수가 있습니다. 수식을 볼 때 LEFT (이름이 발견되면 T (이름도 찾을 수 있습니다. 가장 긴 함수 이름을 먼저 확인한 다음 수식 문자열에서 해당 이름을 제거하면 “거짓 긍정”가능성이 제거됩니다.

이 함수는 다음에서만 작동합니다. ExcelFunctions.txt 파일에 나열된 워크 시트 함수입니다. 원하는대로 파일을 수정하여 위치를 조정할 수 있습니다. 현재 Excel 2016의 모든 표준 워크 시트 함수를 포함하지만에서 사용할 수있는 함수를 포함하도록 수정할 수 있습니다. 추가 기능을 사용하거나 너무 난해하다고 생각되는 기능을 삭제하고 싶을 수 있습니다. (힌트 :

텍스트 파일의 기능 이름 앞에 아포스트로피를 추가하면 절대 포함되지 않습니다. 인벤토리에.) 500 개 미만의 함수 이름이 있습니다. e 파일 지금; 너무 많이 추가하면 EFunc 배열의 매크로에 선언 된 숫자 요소를 변경해야합니다.

매크로가 완료되면 매크로가 생성하는 새 통합 문서에서 인벤토리를 찾을 수 있습니다. 매크로를 완료하는 데 걸리는 시간은 매우 빠르거나 놀랍도록 느릴 수 있습니다. 통합 문서가 클수록 (포함 된 워크 시트가 많고 해당 워크 시트에 수식이 많을수록) 작업을 완료하는 데 더 오래 걸립니다.

거의 500 개의 워크 시트 함수 이름에 대해 통합 문서의 모든 수식을 확인해야합니다.

_ExcelTips_는 비용 효율적인 Microsoft Excel 교육을위한 소스입니다.

이 팁 (5136)은 Microsoft Excel 2007, 2010, 2013 및 2016에 적용됩니다.