본문 바로가기

반응형

엑셀 vba

[엑셀/VBA] Object(개체)와 각 Obejct간의 관계 엑셀 VBA로 엑셀 자동화 코드를 작성해야 하는 경우 각 Obejct간의 관계를 알고있으면 도움이 된다. (이 부분은 파이썬에서 win32com 엑셀 자동화를 다룰 때도 동일한 내용으로 알고 있으면 코드를 쉽게 이해할 수 있다.) 여기서 Object란게 무엇인지 궁금해질 수 있다. 구글링을 하면 Obejct = 개체라고 표현한다. 어떤 자료를 볼 때, 개체 또는 Object라고 표기되어있다면 동일한 것을 표현한다고 보면 된다. 1. 개체(Object)에 대한 개념 참고자료들을 들춰보니 개체(Object)의 예시를 들 때, 자동차에 관련 된 예시를 많이 드는 것 같다. 자동차는 굉장히 수많은 부품의 집약체이다. 이 각각의 부품을 개체(Object)라고 한다. 이 개체(Object)는 3가지 구성요소를 가지.. 더보기
[엑셀/VBA] 엑셀 시트별 모든 데이터 통합하기(합치기) 이번 엑셀 VBA 포스팅은 엑셀 파일의 시트별 데이터를 통합시트에 모두 취합하는 코드를 작성하려고 한다. 코드를 작성하기 전에 작성 Concept은 아래와 같이 정리해본다. Concept 1. 데이터가 있는 시트(DATA1,2,3,4...)와 "통합"시트가 한 파일에 존재한다. DATA 시트는 아래 이미지로는 5개지만 더 많아져도 상관없다. Concept 2. 시트별로 임의로 작성한 모델 및 가격 데이터가 있다. 시트명이 'DATA1'이라면 모델명은 1-알파벳으로 되어있다. 만약 시트명이 'DATA2'라면 2-알파벳인 데이터가 있다. Concept 3. VBA 코드 실행시 "통합"시트에 아래 이미지 처럼 모든 데이터를 취합한다. 먼저 전체 VBA 코드 및 결과부터 확인해보자. 1. 전체 코드 및 결과 O.. 더보기
[엑셀/VBA] 정적 배열, 동적 배열(ReDim, ReDim Preserve) 이번 포스팅은 엑셀 VBA의 정적 배열과 동적 배열에 관한 내용이다. 2 종류의 배열에 대해 요약하자면 정적배열은 크기가 정해진 배열을 말한다. 초기에 배열을 선언할 때, 배열의 총 사이즈를 정한다. 동적배열은 크기가 정해지지 않은 배열이다. 코드를 동작시키며 이름그대로 동적으로 배열의 크기를 변화시킬 수 있다. 아래는 예시를 통해 정적배열과 동적배열의 사용법에 대해 정리해보고자 했다. 1. 정적 배열 1) 1차원 배열 서론에서 설명했지만 정적배열은 크기가 정해진 배열이다. 1차원 배열의 변수선언은 아래와 같이 할 수 있다. #배열 선언법1 Dim 변수명(시작 Index To 끝 Index) as 변수Type 아래 예시 코드 디버깅을 통해 1차원 배열 변수선언을 확인해보도록 하겠다. Sub 정적배열() .. 더보기
[엑셀/VBA] Option Explicit(명시적 선언 사용하기) 엑셀 VBA에는 option Explicit(명시적 선언)이라는 구문이 있다. 요약해서 설명하자면, 다른 프로그래밍 언어와 마찬가지로 변수를 사용하려면 변수명이 무엇인지, 변수의 타입이 무엇인지에 대한 정의가 있어야 한다. 이를 '변수 선언'이라한다. 엑셀 VBA에서 option Explicit(명시적 선언 구문)을 작성해주면 사용하는 변수에 대해서는 모두 타입이 정의되어있어야 한다. 이를 설명하기 위해 엑셀의 묵시적 선언과 명시적 선언을 먼저 이해해보도록 하자. 1. Implicit declaration(묵시적 선언 : 변수 선언을 하지 않는 경우) 예시를 보며 이해해보자. 먼저 명시적 선언 구문이 없을 때 어떤 식으로 변수에 값이 저장되는지 확인해보도록 하겠다. 아래 코드는 a라는 변수에 100을 저.. 더보기
[엑셀/VBA] 사용자 정의 함수(Custom Function) 만들기 이번 엑셀 VBA 포스팅에서는 사용자 정의 함수(Custom Function)을 만드는 방법에 대해 정리해보려고 한다. 먼저 아래 점수표를 예시로 평균이 80점 이상인 학생들에 대해 합격/불합격(PASS/FAIL)을 판정하는 함수를 구현해보려고 한다. 나중에 파이썬 xlwings와 엑셀을 연동할 때 내가 필요한 엑셀 함수를 VBA를 통해 구현하면 좀더 프로그램 속도 측면에서 효율적이지 않을까 싶다. 일반적으로 합격/불합격을 판정하기 위해선 이미 엑셀에서 기본적으로 제공하고있는 AVERAGE 함수와 IF 함수를 사용하면 쉽게 구현할 수 있다. 아래와 같이 말이다. 이번 포스팅은 사용자 정의 함수를 연습하는 내용으로 위 합격여부 판단을 하는 함수를 사용자 정의 함수로 만들어보려고 한다. 먼저 기존 VBA 개.. 더보기
[엑셀/VBA] 다른 엑셀 파일에서 원하는 시트 가져오기 이전 포스팅에서는 원하는 시트를 다른 엑셀 파일로 복사시키는 VBA에 대해 포스팅을 진행했다. 이번 편은 반대로 다른 엑셀파일에서 원하는 시트를 복사해서 가져오는 매크로를 작성해보려고 한다. 프로그램을 테스트하기 위해 아래 가상의 예시파일을 만들었다. 1.xlsx, 2.xlsx, 3.xlsx는 시트를 가져올 엑셀파일들이고 BrigntSheet.xlsm은 매크로 동작파일이다. 1.xlsx, 2.xlsx, 3.xlsx의 시트 구성은 숫자-A,B,C와 같은 구성으로 되어있다. 아래 이미지는 1번 파일의 시트명이다. 2번 3번 엑셀파일도 동일한 규칙으로 시트가 구성되어있다. 이번 포스팅의 목적은 내가 원하는 엑셀파일의 원하는 시트를 가져오는 VBA 코드를 작성해보는 것이다. 사실 이전편과 비교하여 Copy, M.. 더보기
[엑셀/VBA] 엑셀 시트 마지막 행값 구하기 지금까지 엑셀 VBA를 사용할 때 자주 사용했던 부분이 있어 정리해보는 포스팅. 엑셀 업무를 하다보면 아래와 같은 경우를 많이 볼 수 있다. 위 양식은 지출내용을 정리한 간단한 엑셀파일이다. 엑셀을 좀 해봤던 사람이면 당연히 지출 합계는 SUM 함수를 사용해서 간단하게 구할 것이다. 만약, 합계를 데이터가 아래 추가될 때마다 자동으로 마지막 행까지 계산하여 출력하는 VBA 프로그램을 만든다고 해보자. 어떻게 해야될까? 일단 결과 코드부터 작성해보면 아래와 같다. Sub 합계() Dim LastRow As Integer Dim i As Integer Dim rng As Range LastRow = Cells(Rows.Count, 3).End(3)(2).Row Range("F1") = "합계" Range(".. 더보기
[엑셀/VBA] Split , Ubound 함수 설명 및 예시 업무를 하다보면 엑셀에 여러 정보가 한 셀에 묶여 있어 정보별로 구분을 해야하는 경우가 있다. 예를 들면 위와 같이 설명란에 나이, 국적, 연락처가 한번에 섞여있어 구분이 필요한 경우를 들 수 있다. 위 이미지는 가상의 예시로 만들어본거고 실제 회사에서 업무를 할 때 묶여있는 정보를 유의미하게 분류하는 작업이 필요하다. (데이터 전처리) 가장 쉽게 하는 방법은 파이썬을 활용하는 것이다. 파이썬을 활용하여 코드 몇줄 작성하면 위와 같은 케이스는 쉽게 해결이 가능하다. 그래도 이 포스팅은 VBA 공부를 위한 포스팅이므로 엑셀 VBA 입장에서 내용을 정리해본다. 엑셀 VBA도 파이썬과 마찬가지로 다양한 내장함수들을 제공한다. 그 중 자주 쓰이는 2가지 함수가 Split 함수와 UBound 함수이다. 1. Sp.. 더보기

반응형