VBA 24

[VBA] RTF(Rich Text Format) 을 Plain Text로 변경

RTF 자료를 일반 문자열로 변경이 필요할 때 클래스 모듈을 삽입하고 이름을 clsRTFParsser 로 하고 아래 코드를 삽입합니다. Option Explicit '//32bit 버전 출처 : https://stackoverflow.com/a/1747886 #If VBA7 Then '// 64Bit용에는 PtrSafe 적용, LongPtr로 변경 Private Declare PtrSafe Function GlobalAlloc Lib "kernel32" (ByVal wFlags&, ByVal dwBytes As LongPtr) As LongPtr Private Declare PtrSafe Function GlobalLock Lib "kernel32" (ByVal hMem As LongPtr) As Lon..

Excel - VBA 2023.11.02

VBA로 ZIP과 UnZip

Excel 파일인 xlsx, xlsm, xlam, xlsb 등은 모두 기본적으로 Zip파일 형식으로 저장된 파일입니다. 그래서 확장자를 zip으로 바꾸면 파일 내부 구조를 볼 수 있습니다. 물론 읽기 암호를 설정한 경우에는 ZIP파일에 암호를 걸어 둔 것처럼 안을 볼 수 없습니다. 이 파일을 압축해제하면 몇 가지 유용한 처리를 할 수 있습니다. 이 때 사용하기 위한 UnZip과 Zip 소스코드 입니다. UnZip 소스이고, 이 함수는 압축이 해제된 폴더 Path를 반환합니다. Function Unzip(ZipName As Variant) As String Dim UnZipFolder As Variant, BasePath As String Dim FSO As Object: Set FSO = CreateOb..

Excel - VBA 2023.08.27

양력을 음력으로 변환하기

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

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

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

VBA 배열(Array) 관련 유용한 함수

VBA에서 배열(Array)을 이용할 때 유용한 함수로 자주 사용하는 것들을 모아 놓은 것입니다. 2023-05-22 TransposeArray 수정하고, SliceArray 추가 □ IsArray() : 배열인지 아닌지 확인하는 함수 - 변수를 Variant로 선언하고 VarArray = UsedRange.Value2 처럼 Range를 직접 배열에 할당하는 경우 배열이 초기 상태는 Empty라서 IsArray 결과 값은 False이고, 할당된 이후에는 True가 되어 할당 여부를 확인할 때 사용 □ getDimension() : 배열이 1차원인지, 2차원인지 확인하는 함수 결과값 : 배열이 아니면 0, 1차원 배열은 1, 2차원 배열은 2,,,, Public Function getDimension(va..

Excel - VBA 2023.05.22

Barcode 출력하기 (Code 128, Code 39, 2of5 Interleaved, EAN13, Datamatrix, QR Code)

다양한 바코드를 생성할 수 있는 별도의 Excel 바코드 발행 추가기능으로 업그레이드 되었습니다. https://egtools.tistory.com/entry/EGBarcode Excel로 바코드 발행하는 추가기능 EGBarcode (v2.5) 순수한 VBA로 작성된 바코드 발행기입니다. 최종 버전 : V2.5 배포일자 : 2023-03-14 이 함수는 EGTools 추가기능에도 추가되었습니다.(v3.6.0) 발행할 수 있는 바코드 종류는 아래와 같습니다. 1D : Code128, C egtools.tistory.com EGTools 추가 기능에서도 함수 및 매크로로 지원하고 있습니다. 이미 기능이 개선되어 아래 내용은 추천하지 않으니 참고만 하시기 바랍니다. VBA 코드만으로 바코드를 생성하는 매크로 ..

Excel - VBA 2023.02.26

RZ 함수

【 함수 요약 】 RZ 함수는 0이나 빈셀, 오류를 빈문자열("")로 변환합니다. (Remove Zero) Excel 2019 이하에서 EGTools에서 동적배열로 반환되는 함수에서 IFERROR를 적용하지 못하는 것을 보완할 수 있습니다. 이 함수는 EGTools 추가기능에서 지원하는 함수입니다. 【 적용 버전 】 Windows용 : 모든버전 【 함수 구문 】 = RZ( Data , [Ignore] ) 【 함수 인수 】 인수명 옵션 기본값 설 명 Data 필수 없음 변환할 값이나, 배열 또는 영역 Ignore 선택 7 제거할 값을 지정합니다. 1= 0 2 = 빈값 3 = 오류 각 옵션은 더하기 하여 지정합니다. 예) 7 = 1+2+4로 0, 빈값, 오류 모두 제거합니다. 【 함수 상세 설명 】 Exce..

Barcode Font와 VBA 코드

주말에 바코드 관련 정보를 검색하다가 바코드를 전용 Font와 함께 사용할 수 있는 소스를 알게 되어 소개합니다. http://grandzebu.net/informatique/codbar-en/codbar.htm 아주 오래된 소스이기는 하지만, GNU - GPL로 소스와 폰트를 제공하고 있어서 VBA에서 쉽게 사용할 수 있습니다. Font는 아래 Zip파일을 해제한 다음에 오른쪽 마우스 메뉴를 통해서 설치하시면 됩니다. EAN13과 EAN8은 ean13.ttf를 공용으로 사용합니다. 함수는 EAN13과 EAN8이 알수 없는 내장함수로 #REF오류가 나므로 함수 이름을 모두 Barcode를 추가한 이름으로 변경하여 제공합니다. 바코드 출력 부분에는 해당 Font를 적용해야 바코드로 출력됩니다. 2D 바코드..

Excel - VBA 2023.02.20

범위내의 그림/사진의 숫자를 가져오기

범위내에 그림의 수를 확인하고 싶을 때 사용할 수 있는 함수입니다. 함수는 대상 영역에 그림/시진을 추가한다고 함수 결과가 즉시 반영되지 않습니다. 함수를 사용한 후에 그 결과를 다시 사용할 경우에는 반드시 사용셀을 재입력하세요. F9키로 재계산으로 해도 반영되지 않으며, 반드시 F2 키나 더블클릭으로 셀 수정 상태에서 Enter나 Tab키로 입력합니다. CountP( 범위 ) : 셀의 왼쪽위 꼭지점이 범위에 있으면 숫자를 셈 CountPA( 범위 ) : 그림이 범위내에 걸치기만 해도 숫자를 셈 Option Explicit Public Function CountP(aRange As Range) Dim oPic As Shape, iCnt As Long For Each oPic In aRange.Parent..

Excel - VBA 2023.02.18