반응형

사용자 정의 함수 11

주소를 PNU로 변환하기(2) - VBA

3. 특지 구분 연결하기특지 구분 등을 구하는 사용자 정의 함수는 아래 글을 참고 바랍니다.https://lsw3210.tistory.com/564 이번에는 사용자 정의 함수가 아니라 매크로로 특지 구분을 구하겠습니다.그러나 구문은 사용자 정의 함수나 같은데,사용자 정의 함수는 특지구분이란 변수로 값을 반환해야 하는데 반해서매크로는 직접 처리하고 값을 반환할 필요가 없고, 사용자 정의 함수의 경우는 인수(아래 코드에서 '범위')를 직접 대입할 수 있는데 반해서,매크로의 경우는 인수를 대입할 수도 있지만 본 예제의 경우는 반복 구문이기 때문에 인수를 직접 입력할 수 없다는 점입니다.Function 특지구분(범위 As Range) '범위(주소)에서 특지구분을 추출한다. Dim 마지막공백 A..

EXCEL - VBA 2024.08.19

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

통화 기호를 알아내는 사용자 정의 함수(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

병합된 셀의 홈(A1) 셀 알아내기(2) - 홈 셀 알아내기

1편을 여기서 확인하세요. 나. '홈 셀'(1) 홈 셀의 의미홈 셀을 병합된 셀 기준으로 보면 A1셀, 다시 말해 1행 1열이 됩니다. 따라서, Range("A1")이라고 해도 되고, Cells(1,1)이라고 해도 됩니다. (2) 함수 만들기 반복된 동작은 Sub 프로시저로 처리하는데,처리한 후 값을 반환받는 함수를 만들려면 Function 프로시저를 사용해야 합니다.  ① 위 파일을 연 다음개발 도구 - Visual Basic을 누릅니다. 그리고, 맨 아래에 Function이라고 쓰고, 함수명을 입력하는데,GetHomeCell이라고 하겠습니다.그리고 셀 주소를 인수로 받아야 하므로 인수명을 rng로 하고 형식을 Range로 지정합니다.그러면 아래와 같이 됩니다.Function GetHomeCell(rn..

EXCEL - VBA 2024.05.30

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

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

EXCEL - VBA 2024.01.23

메모에 표시되는 사용자 명 표시하지 않기

1. 새 메모와 새 노트 엑셀이 버전 업되면서 '새 메모'와 '새 노트'로 분리되었습니다. '새 메모'는 채팅 기능이고, '새 노트'가 과거의 메모 기능입니다. 이때 새 노트를 누르면 이름과 :(콜론) 표시가 나오고 그 아래 메모를 입력합니다. 2. 사용자 명 삭제 및 편집 파일 - 옵션 - 일반 탭에서 중간에 내려가면 사용자명이 보입니다. 사용자 명을 수정하려면 내용을 수정하면 되는데, 사용자 명을 삭제하려면 내용을 지우고 확인 버튼을 누른 다음 옵션에서 확인해 보면 이름이 그대로 있으므로 스페이스 바를 한 번 밀어서 공백을 삽입해야 합니다. 그리고, 다른 셀에서 새 노트를 누르면 사용자명은 없는데 :(콜론)은 여전히 표시되고 있는 문제점이 있습니다. 3. VBA로 사용자 정의 함수 만들기 일반적인 엑..

EXCEL - VBA 2024.01.02

여러 가지 조건을 만족하는 값을 찾을 때(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

병합 셀의 첫번째 셀 값 찾기(2) - 사용자 정의 함수

함수를 이용하면 다른 PC에서도 그대로 작동하기 때문에 편리한 대신, 워크시트 함수에는 병합 셀과 관련된 함수가 없으므로 https://lsw3210.tistory.com/entry/%EB%B3%91%ED%95%A9-%EC%85%80%EC%9D%98-%EC%B2%AB%EB%B2%88%EC%A7%B8-%EC%85%80-%EA%B0%92-%EC%B0%BE%EA%B8%B0 위 글과 같이 If함수를 중첩적으로 사용해야 하는 불편함이 있습니다. 따라서, VBA로 사용자 정의 함수를 만들어보겠습니다. 사용자 정의 함수는 PC별로 존재하기 때문에 다른 PC에서 열어보면 폴더명과 함께 사용자 정의 함수명이 표시되는 불편함이 있습니다. 그래도 수식으로 작성하면 복잡한데 사용자 정의 함수를 만들면 간단하게 해결할 수 있는..

Excel 2023.05.03

일정한 간격으로 된 값 합계 구하기 - 매크로

사용자 정의 함수로 작성하는 것이 바람직하지만 굳이 만든다고 하면 매크로, Sub 프로시저로도 만들 수 있습니다. 사용자 정의 함수와 매크로는 모두 VBA를 이용하지만 아래와 같이 다른 점이 있습니다. 사용자 정의 함수 매크로 사용자 정의 함수를 실행하면 VBA에서 실행한 후 값을 반환합니다. 매크로를 실행하면 VBA에서 실행한 후 워크시트 함수를 이용한 수식을 반환합니다. =sum_interval(D4:N4,4) =SUM(IF(MOD(COLUMN($D$3:$O$3),2)=0,$D$3:$O$3)) 함수의 인수를 사용자 정의 함수에 입력함 함수의 인수를 매크로 실행시 입력 받음 1. 논리 범위와 간격을 입력받는 창을 실행하고, 입력 받은 값을 기준으로 배열 수식을 만들어 반환한다. Sub make_form..

EXCEL - VBA 2023.03.21

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

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
반응형