VBA를 사용하지 않는 맞춤형 사용자 기능


10

VBA를 사용하지 않고 Excel에서 사용자 지정 사용자 기능을 만들 수 있습니까?
내 문제는 하나의 매우 긴 기능을 만들기 위해 긴 문자열의 표준 Excel 함수가 묶여 있다는 것입니다. 이 기능은 내 통합 문서의 25 가지 워크 시트에서 사용됩니다. 변경해야 할 경우 한곳에서만 변경하고 모든 시트에 자동으로 변경 사항을 전파하십시오.

예를 들어, 간단하고 사소한 경우는 SUM () 결과에 하나를 추가하는 것입니다. SUM (mySeries) +1이고 새 함수 MYSUM ()이라고합니다.

발생할 수있는 잠재적 오류와 복잡성으로 인해 긴 수식을 VBA로 변환하는 것이 주저합니다.


좋은 질문이지만 대답을 찾을 수 있을지는 의문입니다. VBA에서 필요한 기능을 구축하는 데 도움을 요청하는 것이 더 나은 과정이라고 생각합니다.
EliadTech

답변:


11

예, Excel Named Formulas 를 사용하면 가능합니다 .

예를 들어 통합 문서의 다른 위치에서 두 개의 연속 열 합계 ( A5 : Ax-B5 : Bx ) 의 차이를 계산해야한다고 가정합니다 ( x 는 각 열의 마지막 행).

따라서 데이터를 이전 행까지 5 행에서 시작한다고 가정하면 A11 에서 diff 라는 이름 (모든 이름을 사용할 수 있음)을 = Sum (A $ 5 : A10) -Sum (B $ 5 : B10)으로 정의 합니다. A11 뿐만 아니라 모든 셀이 될 수 있지만 정의는 같은 방식으로 변경됩니다.

불행하게도 Excel 2010은 절대 접두사 ( $ )와 워크 시트 접두사를 삽입 하므로 접두사를 지우고 느낌표를 유지하고 대부분의 $ 문자를 지워야 합니다.

수식을 이동할 때 대부분의 참조는 상대적입니다. 따라서 항상 행 5 부터 시작 하여 총 행 앞의 행 까지 현재 열과 다음 열의 차이를 계산합니다 .

당신은 사이의 데이터가 그렇다면 C5D100 그냥 넣어 = DIFF을C101 그것은 계산 합계 (C5 : C100) - 합 (D5 : D100)를 .

분명히, 질문에서 언급 한 것처럼 명명 된 수식에 로컬 또는 전역 이름을 사용할 수 있습니다.

명명 된 수식 에서 자세한 내용을 읽을 수 있습니다 .


2

VBA는 없다고 말했지만 다음과 같이 하면 실제로 수식을 다시 작성하거나 VBA에 대해 많이 알지 못하거나 VBA에서 수식을 유지할 필요 가 없습니다 . 한 번 쓰고 잊어 버릴 수 있습니다.

셀에서 수식을 문자열로 추출하는 사용자 정의 함수를 작성하십시오.

Function GetFormula(Target As Range) As String
    GetFormula = Target.Formula
End Function

수식과 같은 문자열을 평가하기 위해 다른 것을 만듭니다.

Function Eval(Ref As String)
    Application.Volatile
    Eval = Evaluate(Ref)
End Function

sheet1! a1에 마스터 수식이 있다면 이것을 사용해야하는 모든 셀 에이 수식을 넣습니다.

=eval(getformula(sheet1!a1))

Excel 명명 된 수식에 비해이 방법을 사용하면 어떤 이점이 있습니까?
DakotaD

이것은 실제로 함수를 정의하는 반면 "명명 된 공식"은 결과에 대한 참조 만 정의합니다. 예를 들어, 셀이 공백인지 공백인지 검사하는 함수를 만들고 싶다면 다음과 같이 호출하고 싶습니다 =IF(BlankOrWhitespace(A5),true,false). 셀의 수식 내용을 참조하고 새로운 함수를 정의하지 않기 때문에 불가능한 명명 된 수식의 경우
mtalexan

1
VBA 사용으로 인해 발생하는 또 다른 문제가 있습니다. 보안. VBA가 악용 될 수 있으므로 통합 문서가 안전하지 않은 것으로 간주됩니다. 통합 문서가 바이러스에 감염된 것으로 오인 될 수 있습니다.
Akangka

@Akangka 왜 내가 VBA를 피하는 이유. 너무 슬프다.
Pedro77

0

이 스레드는 조금 낡았지만 다른 것을 찾고 그것을 넘어서서이 정확한 일을 달성하기 위해 잠시 동안 만든 통합 문서를 공유 할 것이라고 생각했습니다 : https://www.dropbox.com/s/gf5qrjj5q81tpke/ Title_Case_Named_Range_Function.xlsx? dl = 1

즉, 길이가 0 인 문자열 출력으로 Excel의 기본 제공 수식 중 하나를 하이재킹하고 명명 된 범위 문자열 조작을 통해 삽입 된 데이터를 해석하는 방법을 사용하여 VBA없이 다양한 UDF를 만들 수 있습니다. 비효율적입니다. 경고되었습니다! :)

방법:

  1. 이 예에서는 = REPT ([셀 참조 또는 인용 부호 사이의 일부 텍스트], 0)= TEXT ([셀 참조 또는 인용 부호 사이의 일부 텍스트], ";;;" ") 를 시작점으로 사용했습니다. 셀 자체에 표시되는 텍스트 결과를 생성하지 않는 내장 수식에 사용자 입력 형식을 가질 수 있습니다.

  2. 그런 다음 UDF 이름과 동일한 명명 된 범위 를 만들었습니다 ( TCase 는 시트의 기본 예이지만 다른 변형도 있습니다). 이 명명 된 범위는 실제로 통합 문서에서 다른 숨겨진 이름의 전체 호스트를 참조하여 사용 된 셀 에서 FormulaText 를 추출한 다음 논리를 적용하여 최종 출력을 문자열로 생성합니다. 이 방법은 텍스트 결과 만 반환하고 숫자는 반환하지 않는다는 점에 주목할 필요가 있습니다 (물론 별도의 셀에서 변환 할 텍스트로 숫자를 반환 할 수 있음).

  3. = TCase 자체 는 해석 할 셀 / 문자열 참조가 없기 때문에 오류를 생성합니다 (예제 시트에서 오류 메시지는 따라야하는 형식을 상기시켜줍니다). 그러나 TCase 를 예상되는 길이가 0 인 문자열 Excel 수식과 결합 하면 수식의 입력을 문자열로 읽고 논리를 적용 할 수 있습니다. 결국 공식 / 출력은 다음과 같습니다. 아래 수식에 직접 텍스트 문자열을 삽입했지만 예제 시트에서 단일 셀 참조를 해석 할 수도 있음을 알 수 있습니다.

    공식:
    =TCase&REPT("i want to convert this mIxEd sTRing into A TITLE cAsE string!!!",0)

    산출:

    I Want to Convert This Mixed String Into a Title Case String!!!

결국 Excel을 푸시 할 수있는 한계를 알기 위해 병적 호기심 이외의 다른 방법 으로이 방법을 따르는 것은 권장 하지 않습니다 . VBA는 훨씬 간단하고 우아한 UDF 솔루션이지만 적어도 도전에 참여하는 것은 즐거웠습니다.

참고 : 예제 파일에서 조금 더 쉽게 작동하는 방법을 확인하려면 수식 리본에서 수식 평가를 사용하고예제를 삽입 한 셀 중 하나에서 수식을 시작 / 종료하십시오. 기본 이름이 지정된 범위를 모두 숨겨서 완료 한 후에 정리하면 모두숨기기를 해제하지 않으면 이름 관리자 에 표시되지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.