반응형

UDF 6

셀 서식의 통화 기호 활용하기(환율 적용하기)

통화 기호를 알아내는 사용자 정의 함수(UDF) 만드는 것은 아래 글을 참고 바랍니다.https://lsw3210.tistory.com/538 1. 문제 위 URL에서 통화 표시 형식에 따라 통화 기로를 C열에 수식을 입력해서 구했는데, 이들 통화 기호에 따라 F열에서 K열까지 있는 환율을 이용해 원화로 표기해 보겠습니다.  2. 해법 (가) 수식 1환율이 오른쪽으로 배치되어 있으므로HLookup함수를 사용해야 합니다. 따라서, D1셀에=HLOOKUP(C1,$F$1:$K$2,2,0)라고 입력해서, C1셀 값을 F1셀에서 K2셀까지의 범위의 첫 번째 행에서 찾아 두 번째 행의 값을 구하면 ₩이므로 1이 구해집니다. 이제 A1셀의 값을 구하면 됩니다. 100원이 구해졌습니다. 다시 D1셀의 채우기 핸들을 더..

EXCEL - VBA 2024.07.10

셀 서식의 통화 표시 알아내기 (2) - 사용자 정의 함수(UDF)

Sub 프로시저를 실행하면 여러 가지 동작을 한 번에 실행하는 것이고,Function 프로시저는 내가 원하는 형태의 함수를 만드는 것입니다. 다시 말해 =함수명(셀 주소) 형식으로 매크로를 실행하는 것이 아니라함수로 결괏값을 반환받는 것입니다. 따라서, 사용자 정의 함수(User Defined Function, UDF)를 만들어 사용하면 편리합니다. 1. 논리NumberFormat을 했을 때는 원화 표시 ₩가 $로 표시되어서 사용할 수 없고,NumberFormatLocal을 사용해야 합니다.  그러나. 세 번째 줄부터는 NumberFormat이나 NumberFormatLocal이 같습니다. 그리고, 한 자리 기호인 경우, 다시 말해 '['표시가 없는 경우)는 첫 번째 기호인 ₩와 $를 가져오면 되는데세 ..

EXCEL - VBA 2024.07.09

두 개의 표를 날짜에 따라 맞춰서 표시하기(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
반응형