전체 글 212

Array로부터 1bit 단일색상 BMP 파일 만들기

Barcode 발행 매크로를 만들면서 2D Array에 담고, Excel sheet에 붙여 넣어서 그림으로 복사하는 방식을 사용했는데 이렇게 사용할 경우 함수로는 사용할 수 없어서 Array로부터 직접 BMP파일을 생성하여 삽입하는 방식으로 정리하였습니다. BMP파일을 일반적인 24bit로 만들경우 용량이 커지는 문제가 있어서 1bit 단일색상 BMP 파일로 최소한으로 만들기 위해서 정리했습니다. 색상표현 관련하여 제대로 표시되지 않은 문제를 v2.5로 개선했습니다. BMP파일은 Version 3형식을 선택 (이유는 간단하므로,,,) 구조는 아래처럼 총 4가지 구조로 되어 있으며 File Header DIB Header Color Table Image Data 아래 구조에 대한 참고: http://jus..

Excel - VBA 2023.03.11

Excel로 바코드 발행하는 추가기능 EGBarcode (v2.8) - Code 128, Code 39, 2of5 Interleaved, EAN13, Datamatrix, QR Code, PDF417, Aztec Code, GS1-128, GS1-Datamatrix

아래 추가기능으로 기능 통합 및 이전되었습니다.https://cafe.naver.com/egtools/226 EGBarcode - 바코드생성기 및 바코드 함수 (v3.0)EGTools와 함께 사용할 수 있게 변경하여 별도 추가기능으로 제공합니다. 단독으로 사용할 수 있으며, EGTools와 함께 사용할 수도 있습니다. 함께 사용할 경우 함수는...cafe.naver.com

Excel - VBA 2023.03.06

Array값중 Empty 값이 Null로 변경되는 오류

오늘 VBA 매크로 기능중 이상한 내용이 있어 확인을 했습니다. 셀 내용을 Array로 전환한 다음 각 셀의 내용이 없는 것과 Format(값, "YYYY-MM")으로 당월인지 확인하는 과정이 있었는데, 아래와 같은 IF문을 거치면 Array내의 Empty 값이 Null로 변환이 되어 계속 예상하지 못한 결과가 나왔습니다. IF Format(vData(r, c), "YYYY-MM") = "2023-03" Then 그래서 별도로 빈 Array를 하나 만들어 점검해 봤는데, 이러네요... Sub testEmptyTurnToNullError() Dim vData As Variant, r As Long, c As Long, EmptyCount As Long, NullCount As Long ReDim vData..

Excel - VBA 2023.02.28

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

Ribbon Menu - Table 집계

하나의 Excel 파일에서 여러 Sheet에 표를 작성한 경우 또는 여러사람이 작성한 표형태의 자료를 하나의 파일에 시트별로 모아놓은 경우 필요한 열만 골라서 모든 시트의 목록을 하나로 통합 작성합니다. 1. 집계가 가능한 자료 필수조건 - 집계할 데이터가 있는 시트들의 표제목 행 번호는 반드시 같아야 함 - 열의 배치 순서는 모두 달라도 되나, 집계할 열의 표제목 이름은 같아야 함 - 영문의 경우 대소문자는 구별하지 않음 - 데이터 제목줄에 동일한 이름이 여럿인 경우 마지막 열의 자료로 집계됨에 유의 (표제목이 여러 줄인 경우에는 제목열이 모두 같은 경우에만 해당함) 2. 통합집계표의 표제목을 먼저 작성 - 데이터 시트의 열 순서와 상관없이 원하는 열 순서대로 작성 - 표제목은 집계할 데이터 시트와 같..

EGTools - 기능 2023.01.24

천문연구원 API를 이용한 음력 확인

ToLunar와 ToSolar 함수를 EGTools에 추가하면서 실제 변환이 정확한지 확인하는 것을 천문연구원에서 제공하는 API를 이용해서 확인을 했었는데, 여기에 사용한 코드입니다. 천문연구원에서는 양력기준으로 기원전 59년 2월 13일부터 2050년 12월 31일까지의 양력/음력 날짜를 제공합니다. 양력 달력을 이용하기 위한 API를 주소는 https://astro.kasi.re.kr/life/solc? 이며 yyyy, mm, dd 3가지를 양력으로 입력합니다. 조회 결과는 아래와 같은 형태로 반환됩니다. {"SOLC_WEEK":"토","SOLC_DD":"01","SOLC_LEAP_YYYY":"평","JULIAN_DD":"18","JULIAN_YYYY":"2017","LUNC_YYYY":"2017"..

Excel - VBA 2023.01.19

Macro 실행 시간 측정하기

Macro를 작성하면서 시간을 1ms라도 줄이기 위해서 현재 작성한 매크로의 실행 시간을 측정하는 데 사용하기 위해서 사용 1. Class 모듈 이름을 "cTimer"로 삽입하고 아래 코드 추가 Option Explicit #If Win64 Or VBA7 Then Private Declare PtrSafe Function QueryPerformanceCounter Lib "kernel32" (lpPerformanceCount As Currency) As Long Private Declare PtrSafe Function QueryPerformanceFrequency Lib "kernel32" (lpFrequency As Currency) As Long #Else Private Declare Functio..

Excel - VBA 2023.01.18