반응형
일반적으로 UDF(User Defined Function, 사용자 정의 함수)는 다른 셀 주소를 참조해서 계산을 하며,
아래는 제곱값을 구하는 함수의 코드입니다.
Function square(rngA As Range)
square = rngA.Value * rngA.Value
End Function
그러나, 자기 자신의 셀을 참조해야 할 수도 있습니다.
이때 사용하는 것이 Application.Caller 속성(Property)입니다.
Application.Caller 대충 감을 잡으면
응용 프로그램이 호출하는 곳 또는 어디서 호출되었는지 정도가 될 것입니다.
따라서, 자기 자신 셀을 가리킵니다.
위의 경우에 항상 왼쪽 두 번째 셀의 값을 참고한다고 하면 범위를 이용하지 않고
아래와 같이 Application.Caller와 Offset을 이용해서
Application.Caller.Offset(0, -2).Value라고 수정할 수 있습니다.
Function square(rngA As Range)
' square = rngA.Value * rngA.Value
square = Application.Caller.Offset(0, -2).Value * Application.Caller.Offset(0, -2).Value
End Function
이때 만약 Application.Caller를 ActiveCell을 이용해서 ActiveCell.Offset(0, -2).Value로 수정하면
Function square(rngA As Range)
' square = rngA.Value * rngA.Value
' square = Application.Caller.Offset(0, -2).Value * Application.Caller.Offset(0, -2).Value
square = ActiveCell.Offset(0, -2).Value * ActiveCell.Offset(0, -2).Value
End Function
A열에 값이 3,4,5가 있을 경우 ActiveCell은 현재 셀이므로 C1셀에 9가 반환되는데
다른 셀에 값을 나타나게 하려고 C1셀의 수식을 C3셀까지 끌면 현재 셀이 C1셀이므로 모두 9가 반환되는 문제점이 있습니다.
따라서, 셀마다 값을 제대로 표시하려면 C2셀과 C3셀에서 F2키 누르고 엔터키를 눌러야 하는데, 그렇게 한다는 것은 말이 안 됩니다.
따라서, Application.Caller가 필요한 것입니다.
반응형
'EXCEL - VBA' 카테고리의 다른 글
두 개의 표를 날짜에 따라 맞춰서 표시하기(2) - Dictionary (2) | 2024.01.25 |
---|---|
두 개의 표를 날짜에 따라 맞춰서 표시하기(1) - 개요 (0) | 2024.01.23 |
메모에 표시되는 사용자 명 표시하지 않기 (0) | 2024.01.02 |
While 문 - VB와 VBA의 차이점 (0) | 2023.12.17 |
VBA에서 SumProduct 사용하기 (2) | 2023.11.30 |