Excel UDF가 작동하지 않음: 문제 및 해결 방법

  • 이 공유
Michael Brown

이 문서에서는 통합 문서에서 사용자 지정 함수를 사용할 때 발생할 수 있는 문제를 살펴보겠습니다. 문제의 원인이 무엇이며 얼마나 쉽게 해결할 수 있는지 보여드리겠습니다.

다음은 우리가 이야기할 내용입니다.

    이전에 이야기한 사용자 정의 기능은 어떻게 만들고 사용하는지입니다. 미리 UDF에 대한 기본 지식을 새로 고칠 필요가 있다고 생각되면 잠시 멈추고 이전 기사를 살펴보십시오.

    Excel UDF가 다시 계산되지 않는 이유는 무엇입니까?

    통합 문서에 있는 모든 수식을 Excel에서 다시 계산하지 않습니다. 변경된 셀에만 연결된 수식에 대한 결과를 업데이트합니다.

    그러나 이는 표준 Excel 기능과 관련이 있습니다. 사용자 지정 항목의 경우 Excel은 VBA 코드의 유효성을 검사할 수 없으며 사용자 지정 함수의 결과에도 영향을 줄 수 있는 다른 셀을 식별할 수 없습니다. 따라서 통합 문서를 변경할 때 사용자 지정 수식이 변경되지 않을 수 있습니다.

    문제를 해결하려면 Application.Volatile 문을 사용하기만 하면 됩니다. 적용 방법에 대한 단계별 지침을 알아보려면 다음 장을 확인하세요.

    휘발성 대 비휘발성 사용자 지정 함수

    기본적으로 Excel의 사용자 지정 함수는 휘발성이 아닙니다. 이는 UDF가 참조하는 셀의 값이 변경되는 경우에만 UDF가 다시 계산됨을 의미합니다. 그러나 셀의 형식인 경우워크시트, 파일 이름이 변경되면 UDF에서 변경 사항이 발생하지 않습니다.

    단어에서 예제로 전환하겠습니다. 예를 들어 통합 문서의 이름을 셀에 적어야 합니다. 이렇게 하려면 사용자 지정 함수를 만듭니다.

    Function WorkbookName() As String WorkbookName = ThisWorkbook.Name End Function

    이제 다음과 같은 경우를 상상해 보십시오. 사용자 지정 수식 =WorkbookName() 을 셀에 작성하고 파일 이름을 얻었습니다. 잠시 후에 파일 이름을 바꾸기로 결정하고 다른 이름으로 저장했습니다. 그러나 셀의 값을 보면 변경되지 않았음을 알 수 있습니다. 더 이상 맞지 않는 이전 파일 이름이 여전히 있습니다.

    이 함수에는 인수가 없기 때문에 함수가 다시 계산되지 않습니다(통합 문서의 이름을 변경하고 닫았다가 다시 열어도) 그것).

    참고. 파일의 모든 함수를 다시 계산하려면 Ctrl + Alt + F9 단축키를 사용할 수 있습니다.

    더 쉬운 방법이 있나요? 워크시트가 변경될 때마다 수식이 다시 계산되도록 하려면 추가 코드 줄이 필요합니다. 다음 코드를 함수 시작 부분에 붙여넣으세요.

    Application.Volatile

    따라서 코드는 다음과 같습니다.

    Function WorkbookName() As String Application.Volatile WorkbookName = ThisWorkbook.Name End Function

    이제 UDF는 휘발성이므로 워크시트에 셀이 있으면 자동으로 다시 계산됩니다.다시 계산되었거나 통합 문서에서 변경 사항이 발생했습니다. 파일 이름을 변경하는 즉시 해당 업데이트가 표시됩니다.

    참고. 휘발성 함수가 너무 많으면 Excel 속도가 느려질 수 있습니다. 결국 복잡한 계산을 수행하고 대규모 데이터 범위에서 지속적으로 작동하는 사용자 지정 함수가 너무 많습니다.

    따라서 정말 꼭 필요한 곳에만 휘발성을 사용하시길 권장합니다.

    커스텀 함수를 사용할 수 없는 이유

    커스텀 함수 이름의 첫 글자를 입력하면 나오는 표준 Excel 함수와 마찬가지로 입력 셀 옆의 드롭다운 목록에 표시됩니다.

    하지만 항상 그런 것은 아닙니다. 어떤 실수로 이러한 상황이 발생할 수 있습니까?

    Excel 2003-2007을 사용하는 경우 UDF가 드롭다운 목록에 나타나지 않습니다. 거기에는 표준 함수만 표시됩니다.

    하지만 최신 버전의 Excel을 사용하는 경우에도 실수로 범할 수 있는 또 다른 실수가 있습니다.

    보시다시피 사용자 정의 함수는 모듈이라는 표준 VBA 모듈. 함수 코드를 작성하기 위해 새 모듈을 추가하면 모든 모듈이 쓰여지는 Modules 폴더가 자동으로 생성됩니다.

    하지만 가끔 새 모듈이 생성되고 있습니다. 다음 스크린샷에서 사용자 지정 함수 코드가 "Microsoft Excel 개체" 모듈에 있는 것을 볼 수 있습니다.ThisWorkbook.

    요점은 워크시트나 워크북의 코드 영역에 커스텀 함수를 배치할 수 없다는 것입니다. 이 경우 기능이 작동하지 않습니다. 또한 기능 드롭다운 목록에 나타나지 않습니다. 따라서 코드는 항상 Modules 폴더에 있어야 합니다.

    Excel 사용자 지정 함수 도움말 텍스트가 표시되지 않습니다.

    또 다른 문제가 발생할 수 있는 것은 붙여넣기할 때 표시되는 힌트입니다. 사용자 정의 기능. 표준 함수를 사용하는 경우 함수 및 해당 인수에 대한 도구 설명이 항상 표시됩니다. 하지만 UDF는 어떻습니까?

    사용자 지정 함수가 많은 경우 각 함수가 수행하는 계산을 기억하기가 매우 어렵습니다. 사용할 인수를 기억하는 것이 훨씬 더 어려울 것입니다. 사용자 지정 함수에 대한 설명을 미리 알림으로 두는 것이 좋을 것 같습니다.

    이를 위해 Application.MacroOptions 메서드를 사용하는 것이 좋습니다. 함수 마법사 창에서 함수뿐만 아니라 각 인수에 대한 설명을 표시하는 데 도움이 됩니다. 수식 입력줄에서 Fx 버튼을 클릭하면 이 창이 표시됩니다.

    그러한 힌트를 UDF에 추가하는 방법을 살펴보겠습니다. 이전 기사에서는 GetMaxBetween 사용자 정의 함수를 살펴보았습니다. 지정된 범위에서 최대 수를 찾고 숫자 값의 범위와 최대 및 최소 값의 세 가지 인수를 취합니다.search for.

    이제 이 맞춤 함수에 대한 설명을 추가하겠습니다. 이렇게 하려면 Application.MacroOptions 명령을 만들고 실행합니다. GetMaxBetween 함수의 경우 다음 명령을 실행할 수 있습니다.

    Sub RegisterUDF () Dim strFuncName As String ' 등록하려는 함수의 이름 Dim strDescr As String ' 함수 설명 Dim strArgs() As String '함수 인수 설명' Register GetMaxBetween function ReDim strArgs(1 To 3) '함수의 인수 수 strFuncName = "GetMaxBetween" strDescr = "지정된 범위의 최대 수" strArgs(1) = "숫자 값의 범위" strArgs(2) = "하한 간격 테두리" strArgs(3) = "상한 간격 테두리" Application.MacroOptions Macro: = strFuncName, _ 설명: = strDescr, _ ArgumentDescriptions: = strArgs, _ 범주: = " My Custom Functions " End Sub

    or

    Sub RegisterUDF () Application.MacroOptions Macro: = "GetMaxBetween" , _ Description: = "지정된 범위의 최대 수" , _ Category: = "내 Custom Functions" , _ ArgumentDescriptions: = Array (_ "숫자 값의 범위" , _ "낮은 간격 bor der" , _ "상한 간격 경계" ) End Sub

    변수 str FuncName 은 함수의 이름입니다. strDescr - 기능 설명. strArgs 변수에는 각 인수에 대한 힌트가 포함되어 있습니다.

    네 번째 인수가 무엇인지 궁금할 수 있습니다.Application.MacroOptions. 이 선택적 인수의 이름은 Category 이며 사용자 지정 GetMaxBetween () 함수가 배치될 Excel 함수의 클래스를 나타냅니다. 기존 범주 뒤에 이름을 지정할 수 있습니다. Math & ; Trig, Statistical, Logical 등. 생성한 함수를 배치할 새 범주의 이름을 지정할 수 있습니다. 범주 인수를 사용하지 않으면 사용자 정의 함수가 자동으로 "사용자 정의" 범주에 배치됩니다.

    함수 코드를 모듈 창에 붙여넣기:

    그런 다음 “실행” 버튼을 클릭합니다. 이 명령은 GetMaxBetween() 기능과 함께 Fx 버튼을 사용하기 위한 모든 설정을 수행합니다.

    함수 삽입 도구를 사용하면 GetMaxBetween 함수가 "내 사용자 지정 함수" 범주에 있음을 확인할 수 있습니다.

    You 셀에 함수 이름을 입력하기만 하면 선택할 수 있는 함수 드롭다운 목록에 사용자 지정 함수가 표시됩니다.

    그런 다음 함수 마법사를 호출합니다. Fx 버튼으로.

    팁. CRTL + A 키 조합을 사용하여 함수 마법사를 열 수도 있습니다.

    함수 마법사 창에서 함수에 대한 설명과 첫 번째 인수에 대한 힌트를 볼 수 있습니다. 위에 커서를 올려놓으면두 번째 또는 세 번째 인수에 대한 힌트도 표시됩니다.

    이러한 힌트의 텍스트를 변경하려면 strDescr strArgs RegisterUDF() 코드의 변수. 그런 다음 RegisterUDF () 명령을 다시 실행하십시오.

    지정한 모든 설정을 취소하고 기능 설명을 지우려면 다음 코드를 실행하십시오.

    Sub UnregisterUDF () Application.MacroOptions Macro: = "GetMaxBetween" , _ Description: = Empty , ArgumentDescriptions: = Empty , Category: = Empty End Sub

    커스텀 함수를 입력할 때 힌트를 얻을 수 있는 방법이 하나 더 있습니다. 함수 이름을 입력한 다음 Ctrl + Shift + A를 누릅니다.

    =GetMaxBetween( + Ctrl + Shift + A

    함수의 모든 인수 목록이 표시됩니다:

    안타깝게도 여기에서는 함수와 해당 인수에 대한 설명을 볼 수 없습니다. 그러나 인수의 이름이 매우 유익하다면 도움이 될 수도 있습니다. 그래도 없는 것보다는 낫습니다 :)

    표준 Excel 함수처럼 작동하는 UDF용 인텔리센스를 생성하려면 약간의 작업이 더 필요합니다. 불행히도 Microsoft는 어떤 옵션도 제공하지 않습니다. 현재 사용할 수 있는 유일한 솔루션은 Excel-DNA IntelliSense 확장입니다. 자세한 내용은 개발자 웹사이트에서 확인할 수 있습니다.

    이 가이드라인이 사용자 지정 기능이 작동하지 않거나 작동하지 않을 때 문제를 해결하는 데 도움이 되기를 바랍니다.당신이 원하는대로 작동합니다. 그러나 UDF가 여전히 작동하지 않으면 의견 섹션에 문제를 정확하게 설명하십시오. 저희가 문제를 파악하고 해결책을 찾아드리겠습니다 ;)

    Michael Brown은 소프트웨어 도구를 사용하여 복잡한 프로세스를 단순화하려는 열정을 가진 열성적인 기술 애호가입니다. 기술 산업에서 10년 이상의 경험을 쌓은 그는 Microsoft Excel 및 Outlook은 물론 Google 스프레드시트 및 문서 도구에 대한 기술을 연마했습니다. Michael의 블로그는 자신의 지식과 전문 지식을 다른 사람과 공유하는 데 전념하며 따라하기 쉬운 팁과 생산성 및 효율성 향상을 위한 자습서를 제공합니다. 노련한 전문가이든 초보자이든 Michael의 블로그는 이러한 필수 소프트웨어 도구를 최대한 활용하기 위한 귀중한 통찰력과 실용적인 조언을 제공합니다.