728x90

Excel - VBA 65

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

VBA에서 Web 정보 가져오기 (Web Scraping)

Web Page에서 원하는 정보를 가져와서 재구성하거나 필요한 파일을 Web에서 다운로드 할 때, 또는 RESTful API를 이용하여 정보를 획득할 때 등등 Web에서 필요한 정보를 가져오기 하는 함수입니다. Web 스크래핑에 사용할 수 있는 개체는 대략 3가지 정도입니다. MSXML2.XMLHTTP.6.0, MSXML2.ServerXMLHTTP, WinHttp.WinHttpRequest.5.1 각각 속도와 장단점이 있기 때문에 일반적으로 XMLHTTP6.0을 사용하고 나머지 2개는 필요한 경우에 별도로 지정을 하도록 합니다. On Error Resume Next Select Case UseObject Case 1 ''// 일반적인 환경에서 속도가 빠름, OAuth처럼 Redirect가 필요한 경우에 ..

Excel - VBA 2023.07.11

VBA CreateObject("htmlfile")을 이용한 URL Encode 및 HTML Entity 제거

RESTful API를 사용할 때에 URL에 옵션 내용을 넣어야 하는 경우 URL Encode를 해야 합니다. Excel은 2013버전부터 내장함수로 ENCODEURL()을 지원하고 있으나, 그 이전 버전도 사용해야 하므로 아래와 같이 간단한 코드로 Encoding을 할 수 있습니다. Function EncodeURL(Text As Variant) '// Application.ENCODEURL은 Excel2013부터 지원함 Dim oHTML As Object: Set oHTML = CreateObject("htmlfile") oHTML.parentWindow.execScript "function encode(s) {return encodeURIComponent(s)}", "jscript" EncodeUR..

Excel - VBA 2023.07.10

VBA로 인터넷 연결을 확인하기

인터넷에 연결되어 있는지는 윈도우 API를 사용하여 확인이 가능합니다. Window API를 사용할 수 있도록 정의 #If Win64 Or VBA7 Then Public Declare PtrSafe Function InternetGetConnectedState Lib "wininet.dll" (ByRef dwflags As Long, ByVal dwReserved As Long) As Long #Else Public Declare Function InternetGetConnectedState Lib "wininet.dll" (ByRef dwflags As Long, ByVal dwReserved As Long) As Long #End If API를 사용하여 연결된 상태를 확인합니다. 관련된 상수는 아래와..

Excel - VBA 2023.07.10

Filter된 영역에서 Macro 작업하기

AutoFilter를 사용중인 영역에서 Macro작업을 할 필요가 있을 때에 이미 설정된 Filter 정보를 저장했다가 Macro 작업 이후 다시 동일한 설정을 할 필요가 있을 때 아래와 같이 Backup 및 Restore를 할 수 있습니다. 먼저 필터가 적용중인 주소를 저장할 변수를 설정합니다. Private cFilteredAddress As Variant '필터된 영역의 주소 저장용 필터를 백업할 때는 각 열마다 필터된 첫번째 내용(Criteria1), 연산자(Operator), 두번째 내용(Criteria2)를 배열을 이용하여 저장해 둡니다. Public Function BackUpFilters(sh As Worksheet) Dim FilterArray As Variant Dim col As In..

Excel - VBA 2023.07.03
728x90