반응형

UDF 4

두 개의 표를 날짜에 따라 맞춰서 표시하기(1) - 개요

1. 문제 두 개의 표가 있는데 날짜의 개수가 다릅니다. 이 경우 날짜별로 짝을 맞춰서 오른쪽과 같이 표현하려고 합니다. 다시 말해, 왼쪽에는 1/11이 8개 있고, 오른쪽에는 1/11이 5개이므로 오른쪽 표에서 3개는 공란이 되어야 합니다. 2. 해결 방법 엑셀 함수로 하기에는 너무 어려울 듯합니다. 날짜별로 개수를 세서 한쪽이 부족할 때는 공란으로 채워야 하는데, 날짜도 무작위이고, 개수도 달라질 수 있으므로 VBA로 작성하는 것이 답일 듯합니다. 가. 날짜를 Dictionary에 저장 날짜를 배열에 담을 건지 여부를 판단해야 하는데, 고윳값을 저장하는 것은 Dictionary에 담는 것이 좋습니다. 나. 날짜 데이터 정렬 위 예제에서는 날짜를 정렬할 필요는 없지만, 어떤 경우가 생길지 모르니 날짜를..

EXCEL - VBA 2024.01.23

UDF에서 자기 셀 참조 시

일반적으로 UDF(User Defined Function, 사용자 정의 함수)는 다른 셀 주소를 참조해서 계산을 하며, 아래는 제곱값을 구하는 함수의 코드입니다. Function square(rngA As Range) square = rngA.Value * rngA.Value End Function 그러나, 자기 자신의 셀을 참조해야 할 수도 있습니다. 이때 사용하는 것이 Application.Caller 속성(Property)입니다. Application.Caller 대충 감을 잡으면 응용 프로그램이 호출하는 곳 또는 어디서 호출되었는지 정도가 될 것입니다. 따라서, 자기 자신 셀을 가리킵니다. 위의 경우에 항상 왼쪽 두 번째 셀의 값을 참고한다고 하면 범위를 이용하지 않고 아래와 같이 Applicat..

EXCEL - VBA 2024.01.05

여러 가지 조건을 만족하는 값을 찾을 때(3) - 동적 배열을 이용한 속도 개선

동적 배열을 이용해서 사용자 정의 함수 코드를 수정했더니 훨씬 속도가 빨라졌습니다. 1. 사용자 정의 함수 구문 가. 기존 코드 Option Explicit Option Base 1 Function multi_vlookup(lookup_value, lookup_array, return_array As Range) Dim i As Double '배열은 그대로 두고, 범위일 경우 배열로 변환 Dim Range_to_Array As Variant Debug.Print (vbCrLf & "범위 배열 변환1 : " & Now()) Range_to_Array = lookup_array For i = 1 To UBound(Range_to_Array) If i >= 2 And Len(Range_to_Array(i, 1..

EXCEL - VBA 2023.07.27

일정한 간격으로 된 값 합계 구하기 - 사용자 정의 함수

1. 배열 수식의 단점 배열 수식을 이용할 경우 편리한 것 같기도 하지만 아래와 같이 여러 가지 함수를 결합해서 사용해야 하고, =SUM((MOD(COLUMN($D$3:$O$3),2)=0)*$D$3:$O$3) 합계를 구하는 셀의 위치가 달라지면 나머지 값을 바꿔줘야 하는 불편함이 있습니다. 그래서 VBA로 사용자 정의 함수를 만드는 것을 해보겠습니다. 2. 사용자 정의(지정) 함수 만들기 가. Function과 Sub 프로시저 사용자 정의 함수는 Sub 프러시저와 같이 모듈에 만드는데 약간 다른 점이 있습니다. Function Procedure(사용자 정의 함수) Sub Procedure Function 함수명(인수1 as 형식, ...) as 형식 처리 프로세스 함수명 = 값 End Function S..

EXCEL - VBA 2023.03.20
반응형