728x90

Excel - VBA 59

양력을 음력으로 변환하기

EGTools 추가기능에서 지원하는 음력 변환 함수인 ToLunar() 함수에 대한 소스코드 설명입니다. 천문연구원의 API를 이용하여 음력으로 전환할 수도 있지만, Excel은 인터넷이 없는 환경에서도 양력을 음력으로 변환할 수 있도록 만들었습니다. 지원되는 양력 구간은 1900-01-01부터 2100-12-31까지입니다. (2023.08-23일 확장) 10여년도 훨씬 전에 SQL Table로 만들어서 변환하던 것에서 착안하여 VBA에서 Table보다는 Array를 이용하는 것이 훨씬 유리하기 때문에 Array를 이용한 날짜 세기 방식으로 만든 것입니다. 배열은 3개를 사용합니다. Dim LY As Variant, LM As Variant, LType As Variant Ltype()에는 각 월의 날수..

Excel - VBA 2023.08.23

IsNumeric 함수의 함정

오늘 VBA로 처리하던 중 이상한 문제가 있어 기록해 둡니다. IsNumeric() 함수는 인자가 숫자나 숫자로 전환될 수 있으면 True를 반환합니다. 생각지도 못했던 문자열이 True로 나오는 문제가 있으므로 주의 해야 합니다. IsNumeric("0D0") = True IsNumeric("0E0") = True 자릿수와 상관없이 숫자열 + D/E + 수자열에 대해서 IsNumeric이 True가 됩니다. CDbl로 평가해 보면 아래처럼 지수형태의 숫자로 인지하고 있습니다. CDbl("1234D02") = 123400 CDbl("1234E02") = 123400 그래서 아래처럼 지수형태로 검토해 보면 CDbl("1234D-2") = 12.34 CDbl("1234E-2") = 12.34 지수형태의 문자..

Excel - VBA 2023.08.06

VBA에서 사용자 Folder를 찾기

일반적으로 C: 드라이브에 Desktop, Downloads, Documents, Pictures, Videos 같은 사용자 폴더가 위치하는데, 용량관리를 위해서 D: 드라이브에 옮겨서 사용하는 경우 이런 옮겨진 사용자 폴더를 찾아야 할 때 정확한 위치는 아래 Registry를 보면 알 수 있습니다. VBA에서는 아래와 같이 찾을 수 있습니다. MyFolderName = CreateObject("WScript.Shell").RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\personal") %USERPROFILE%이 포함된 폴더명이 있을 경우 아래처럼 처리합니다. MyFolderN..

Excel - VBA 2023.08.05

Outlook 없이 메일을 발송하기 (CDO.Message)

Outlook 이 설치되지 않은 경우나, Outlook을 사용하지 않고 직접 메일 서버를 통해서 메일을 발송해야 하는 경우에 사용할 수 있습니다. 함수로 구현하며, 수신주소, 메일제목, 메일본문, 첨부파일 4가지 인수를 받도록 합니다. Function SendMailwithCDO(vReceipt As Variant, _ sTitle As String, _ Optional sBody As Variant = "", _ Optional vAttachments As Variant = "") 메일 서버에서 발송하기 위해서는 메일서버 및 계정 정보가 필요합니다. Dim sName As String '발송인 이름 Dim sEmail As String '발송 메일 주소/계정 Dim sPass As String '계정 ..

Excel - VBA 2023.08.04

Outlook을 이용하여 Email 발송하기

간단하게 메이를 발송하기 위한 코드를 정리합니다. 함수로 제작을 하고, 받을 인수는 수신주소, 메일제목, 메일본무, 첨부파일 4가지로 합니다. 수신인은 수신만 있는 String 이거나, 수신/참조/숨은참조를 넣은 배열로 받을 수 있도록 Variant로 선언하고 본문과 첨부는 없어도 에러는 아니므로 Optional 처리 첨부파일도 다일파일 Path는 String이고, 여러 첨부파일으 Path를 넣은 배열로 받기 위해 Variant로 합니다. Function SendMailwithOutlook(vReceipt As Variant, _ sTitle As String, _ Optional sBody As Variant = "", _ Optional vAttachments As Variant = "") Outlo..

Excel - VBA 2023.08.03

Chart의 이벤트를 사용하기

Chart의 특정 부위를 더블 클릭하면 이벤트를 실행하고자 할 때 Class를 이용해서 차트에서 이벤트를 사용할 수 있도록 설정하는 방법입니다. 전체적인 내용은 이벤트를 가진 개체를 정의할 때 사용하는 방법과 동일합니다. □ 이벤트를 가진 Chart용 이벤트 Class 정의 먼저 Chart에서 이벤트를 사용할 수 있도록 WithEvents를 사용한 Class를 정의합니다. Class 이름은 clsEventChart라고 하겠습니다. 실제 Chart에서 일어나는 이벤트 처리 작업은 여기에서 설정합니다. Public WithEvents EvtChart As Chart '//이벤트를 가진 Chart개체 Private m_x As Long '//마우스 위치 Private m_y As Long '//마우스 위치 P..

Excel - VBA 2023.08.01

특정일이 공휴일이면 이전/이후의 근무일 찾기 FindWorkDay

어느 날짜가 공휴일이면 이후 첫번째 근무일을 찾는 경우가 있습니다. 이를 함수로 구현해 봅니다. 함수의 인수로는 지정일자, 주말휴일, 공휴일 목록, 검색방향 4개를 사용합니다. 주말 휴일은 NetWorkDays.Intl함수에서와 같은 주말휴일 옵션을 사용합니다. Public Function FindWorkDay(StartDate As Date, _ Optional Weekend As Variant = 1, _ Optional Holidays As Variant, _ Optional Direction As Integer = 1) 내부적으로 사용할 변수를 지정합니다. Dim sWeekend As String '// 요일별 근무일/휴무일 지정 Dim vHolidays As Variant '// 휴일 목록 Di..

Excel - VBA 2023.07.27

대량의 목록을 한 번에 VLOOKUP 조회하는 mass VLOOKUP

수천행 또는 수십만행 정도의 대량 목록에 대해서 VLOOKUP을 하게되면 각 셀마다 수천/수십만개의 자료에 대해서 검색을 하느라 내장함수이지만 시간이 많이 소요될 수 밖에 없습니다. 대부분의 업무가 조회 대상 Data는 고정해서 VLOOKUP을 사용하므로, 각 셀별로 따로따로 검색을 하지 않고, 검색 결과를 일괄로 작업하여 결과를 도출하는 것이 시간을 많이 단축될 것입니다. 이를 함수로 구현하는 부분은 이렇게 됩니다. 인수는 VLOOKUP과 같으나 찾는 값이 단일값이 아닌 범위를 사용하는 것이 차이가 될 수 있습니다. 추가로 VLOOKUP에서 찾는 값이 없을 때 #N/A 오류가 나오고 이를 처리하기 위해서 IFERROR 함수를 추가로 사용하므로 이를 줄이고자 추가 인수로 PAD_with를 넣어 주는 것으..

Excel - VBA 2023.07.26

Naver 파파고 API를 이용한 번역함수 만들기

이 함수는 EGTools에 추가었습니다. 네이버의 파파고 API를 이용하여도 번역을 할 수 있는데, Google API와는 다르게 API를 사용할 수 있는 권한을 등록해야 합니다. 여기서는 API 권한신청과 관련한 내용은 다루지 않으므로 네이버 API 관련 도움말을 참고하세요. 신청이 완료되면 아래와 같이 Client ID와 Client Secret을 확인할 수 있습니다. 그리고, 무료 사용의 경우 일일 5,000자로 제한이 있으므로 할당량을 다 사용한 경우 사용이 제한됩니다. 파파고 API는 "POST" 방식으로 진행되고, request Header에 다음이 설정되어야 합니다. Content-Type: application/x-www-form-urlencoded; charset=UTF-8 X-Naver..

Excel - VBA 2023.07.11

Google 번역 앱을 이용한 번역 함수 만들기

이 함수는 EGTools에 추가되었습니다. Google의 번역 서비스를 이용한 번역은 URL에 번역 옵션을 넣어서 요청합니다. 로그인이 필요하지 않은 서비스라서 사용이 간편합니다. 서비스 주소는 https://translate.google.com 이나 모바일 버전이 좀 더 간단하므로 실제 사용에는 https://translate.google.com/m 을 사용합니다. URL에 넣어야 할 옵션은 4가지 입니다. hl=xx : 화면에 사용할 언어입니다. 한국어는 ko로 지정 sl=xx : 번역할 원문의 언어입니다. auto로 설정할 수 있습니다. tl=xx : 변역되어 나와야 하는 언어입니다. 생략하면 ko로 합니다. q=xx : 번역에 사용할 원문 문자열입니다. URLENCODE 하여야 합니다. 이렇게 구..

Excel - VBA 2023.07.11
728x90