전체 글 212

구글 Form을 이용해서 구글 시트에 Data 모으기

구글 Form으로 설문조사를 해 보면 재미 있는 사실을 알 수 있습니다.설문지를 작성해 놓으면 해당 문서의 URL을 가지고 여러 사람들이 응답을 기재하고이 응답을 구글시트에 연동하여 자동으로 기재가 되게 만들 수 있습니다. 이런 설문은 응답자가 직접 답을 가재하고 [제출]을 하여 자료가 기록되는데,,,혹시 이걸 VBA를 이용해서 자동화 할 수 있다면,,,서버를 구축하지 않고도 데이터를 수집할 수 있지 않을까하여 그 방법을 소개합니다. 1. 구글 Form 만들기구글 앱 중에서 [Forms]를 선택하고 [새 설문지 만들기]를 합니다.2. 구글 Form에 수집할 항목 만들기설문지 문항을 아래와 같이 하나씩 추가 해 줍니다.샘플은 단답형으로 3개의 문항을 만들었습니다. 3. [응답] 탭에서 [Sheets에 연결..

Excel - Sample 2023.09.02

WorkBook과 Worksheet 보호를 암호 없이 해제하기

Excel의 보안은 취약하기 이를 데 없습니다. 예전에는 아주 간단한 문자열 대입하는 코드로도 시트보호 암호를 깨기도 했는데, 지금은 암호입력과 결과 반응 시간을 늘려서 해당 코드를 시간이 주구장창 길어져서 효과가 없는 것 같습니다. 그래서 다른 방법으로 해제하는 방법을 소개하면 아래와 같습니다. Excel 문서 파일은 Zip파일과 같은 형식으로 구성되어 있습니다. 확장자를 아래처럼 .zip으로 변경하고 파일탐색기에서 열어보면 아래와 같이 폴더 구조와 파일들을 볼 수 있습니다. 만약 열기 암호가 설정된 파일이라면 열기 암호를 해제한 후에 볼 수 있습니다. 주요 내용은 xl 폴더 안에 있으므로 xl폴더를 먼저 보면 아래와 같습니다. 여기에 보면 workbook.xml 이라는 파일이 있는데, 여기에 Work..

Excel - VBA 2023.08.28

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

IFVISIBLE 함수

【 함수 요약 】 Excel의 AGGREGATE함수와 비슷하게 보이는 셀에 대해서만 각종 통계 함수를 적용하는데, 조건을 추가하여 필터링 된 것만 계산할 수 있도록 추가된 함수입니다. 이 함수는 EGTools 추가기능에서 지원하는 함수입니다. 【 적용 버전 】 Windows용 : Excel 2010 ~ (지원하는 함수중에 일부가 2010버전부터 사용 가능함) 【 함수 구문 】 = IFVISIBLE ( Function_Num , argRange , [ k ] , [ Include ] ) 【 함수 인수 】 인수명 옵션 기본값 설 명 Function_Num 필수 없음 통계에 사용할 함수 1=Average,2=Count,3=CountA,4=Max,5=Min, 6=Product,7=StDev.s,8=StDev.P..

DIRFOLDER 함수

【 함수 요약 】 지정한 폴더의 파일명 목록을 출력하며 필터를 지정하면 검색 결과만 출력할 수 있습니다. 이 함수는 EGTools 추가기능에서 지원하는 함수입니다. 【 적용 버전 】 Windows용 : 모든버전 【 함수 구문 】 = DIRFOLDER( FolderPath , [ Filter ] ) 【 함수 인수 】 인수명 옵션 기본값 설 명 FolderPath 필수 없음 검색할 폴더의 드라이브명을 포함한 Full Path Filter 선택 "*.*" 파일이름을 검색할 키워드 필터, 생략하면 "*.*"을 적용하여 모든 파일을 출력 여러 개 사용할 경우 세미콜론(;)으로 연결 ( "*.xls;*.xlsx;*.xlsm") 【 함수 상세 설명 】 "Dir 폴더명"을 한 것처럼 해당 폴더의 파일 이름을 출력합니다..

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