반응형

사용자 정의 함수 7

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

Lambda 함수 매개변수 2개 이상인 경우(1)

=LAMBDA([parameter1, parameter2, ...,] 계산식) Lambda함수의 구문이 Parameter를 여러 개 전달하고, 이를 이용해 계산식에 적용한 후 결괏값을 반환하므로 2개 이상의 매개변수를 전달할 수 있습니다. Lambda함수는 Microsoft 365용 Excel, Microsoft 365용 Excel(Mac용), 웹용 Excel에서만 이용가능합니다. 따라서 이전 버전이란 함수 목록에 표시되지 않고, Lambda함수로 된 수식은 #NAME! 에러가 발생합니다. 1. 직각삼각형의 빗변의 길이 구하기 가. 수식을 이용한 경우 피타고라스의 정리에 따라 밑변과 높이의 제곱을 더한 후 제곱근을 구하면 됩니다. 제곱근을 구하는 함수는 SqRt(Square Root)이고, 제곱을 구하는..

Excel 2023.01.18
반응형