ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 엑셀 매크로 (VBA) - 001. 특정 행을 복사하여 삽입하기
    Excel/Excel 매크로 2022. 8. 12. 22:34
    728x90

    작업하다가 VBA를 사용할 일이 많아서, 기본적인 내용 및 해왔던 내용들을 정리해 봅니다.

     

    전체 목차

     - 001. 특정 행을 복사하여 삽입하기

     - 002. 선택하여 붙여 넣기 기능 정리

     - 003. 변수/Assignment/Loop/비교

     - 004. 데이터가 있는 셀의 범위 알아내기

     - 005. 데이터 시트(쉘) 순회하기

     - 006. 셀 병합 하기

     - 007. 변수에 저장되어 있는 데이터 확인하기 (디버그 기능) 

     - 008. 정렬하기 (Sort)

     - 009. 버튼 컨트롤 (Excel Form vs. ActiveX)

     - 010. 콤보 상자 컨트롤 (Excel Form vs. ActiveX)

     - 011. 확인란/옵션단추 컨트롤(Excel Form vs. ActiveX)

     - 012. 스핀단추 컨트롤(스피너, Excel Form vs. ActiveX)

     - 013. 자동필터(Auto Filter)

     - 014. 함수(function) (전편)

     - 015. 함수(function) (후편)

     - 016. 중복 데이터 제거하기 

     - 017. 텍스트 나누기 (공백, 특수문자)

     - 018. Vlookup으로 데이터 조회하기(주식 종목 코드 조회)

     - 019. 런타임 에러 처리 (1)

     - 020. 런타임 에러 처리 (2)

     - 020. 인풋박스 (InputBox) 사용 방법

     

    포스트 목차.

     

    01. 엑셀에서 개발도구 사용 설정

    - 엑셀을 실행 후 파일 메뉴를 클릭한다.

    - 이후 하단에 있는 옵션 메뉴를 클릭한다.

    엑셀의 파일 메뉴를 클릭하면 위와 같은 세부 메뉴에 접근할 수 있다.

     - Excel 옵션 메뉴에 진입 후에 리본 사용자  지정 메뉴를 클릭한다. 오른쪽에 있는 개발도구 앞의 체크박스를 클릭하여 개발도구를 활성화 한다.

    - 엑셀의 메인 화면으로 돌아가서 개발도구 메뉴가 보이면 성공이다. 왼쪽의 Visual Basic을 클릭하면 편집기를 실행 할 수 있다. 

     

     

     
    02. 해결해야하는 문제 설명

    작업 전


    작업 후

     - [작업 전] 시트에 있는 4번째 행의 데이터를 동일하게 5개 복사하여, 총 6개의 중복 데이터를 만든다.

     

    03. 문제 해결을 위한 도구 설명

     

     

     - Range 객체

       하나 또는 그 이상의 연속된 셀을 나타내는 객체이다. 

       엑셀의 셀 영역을 지정하는 함수들이 Range 객체를 반환한다.    

     

      - ActiveCell 속성

       활성화되어 있는 엑셀 프로그램에서 선택되어 있는 셀을 나타낸다.

       선택되어 있는 셀이 단일 셀이 아닐 경우 좌측 최상단의 셀을 나타낸다.

       셀을 나타내기 위해 Range 객체를 반환한다.

       

     - 범위 선택

       Range 객체에서 Select를 이용하면 범위 선택이 가능하다.

       실제 엑셀에서 마우스 또는 방향키로 범위를 선택하는 것과 동일한 기능

     

     - Offset   

       Range 객체의 위치를 바꾼다.

       Offset(x,y): x 만큼 아래 행으로 이동 (음수 값의 경우 위로), y 만큼 오른쪽 열로 이동 (음수 값의 경우 왼쪽)

       Range가 단일 셀이 아닐 경우 좌측 최상단의 셀을 기준으로 위치를 바꾼다.

     

        ActiveCell, Offset, 범위선택의 사용 예)

    1
    2
    3
    4
    '활성화되어 있는 셀을 선택한다.
    ActiveCell.Select 
    '활성화되어 있는 셀에서 5행 밑에 있는 셀을 선택한다.
    ActiveCell.Offset(5,0).Select
    cs

     

     - Rows

      Rows 엑셀에서 행을 특정하는  Range 객체를 반환한다.

      Rows(n): n번째 행 

      Rows("n:m"):  n번째 행부터 m번째 행까지의 영역

       

      Rows의 사용 예)

    1
    2
    '활성화 셀에서 밑으로 4개의 행을 선택한다.
    ActiveCell.Rows("1:4").Select
    cs

     

     - EntireRow

       Range 객체와 함께 사용하고, 행을 구성하는 전체 열을 포함하고 있는  Range 객체를 반환한다.

      

       EntireRow의 사용 예)

    1
    2
    'Sheet1이란 이름의 시트의 1번에서 3번까지의 행을 선택한다.
    Worksheets("Sheet1").Rows("1:3").EntireRow.Select
    cs

     

     - Insert

       셀이나 셀의 범위를 삽입한다.

       Insert Shift:=[옵션값] CopyOrigin:=[옵션값]

       다음과 같은 파라미터를 가지며, 모든 파라미터가 생략 가능하다.

       *Shift: 삽입하면서 기존에 있던 셀을 어떤식으로 이동시킬지를 나타낸다. 

                 xlShiftToRight, xlShiftToDown를 사용할 수 있다. 

        *CopyOrigin: 삽입할 때 셀의 포멧이 복사되는데, 어떤 셀을 참조하여 복사할지를 정한다.

                 xlFormatFromLeftOrAbove, xlFormatFromRightOrBelow 두개의 값을 가질수 있으며,

                 왼쪽또는 위의 셀을 참조할지, 오른쪽 또는 아래의 셀을 참조할지 정한다.

     

        Insert의 사용 예)

    1
    2
    '선택된 영역을 기준으로 데이터를 삽입하며, 기존 데이터를 밑으로 이동시키고, 위쪽/왼쪽 셀의 포멧을 따른다.
    Selection.Insert Shift:=xlShiftDown, CopyOrigin:=xlFormatFromLeftOrAbove
    cs

     - Selection

      현재 선택되어 있는 셀 또는 셀의 범위를 가져온다. Range 객체를 반환한다.

     

     - Copy

       Range 객체와 연동하여 해당 Range를 복사한다.

       다음과 같은 파라미터를 가지며, 모든 파라미터가 생략 가능하다.

     - PasteSpecial

       Range 객체와 연동하여 해당 Range에 붙여넣기를 실행한다.

       PasteSpecial Paste :=  [옵션값] Operation := [옵션값] SkipBlanks := [옵션값] Transpose := [옵션값]

       *Paste: XlPasteType의 값들 (선택하여 붙여넣기의 붙여넣기 속성에 해당)

       *Operation: XlPasteSpecialOperation의 값들 (선택하여 붙여넣기의 연산에 해당)

       *SkipBlanks: True일 경우 내용이 없는 셀을 카피 하지 않는다. (선택하여 붙여넣기의 내용 있는 셀만 붙여넣기)

       *Transpose: True일 경우 열과 행을 바꿔서 복사한다. (선택하여 붙여넣기의 행/열 바꿈)

     

     

     

     

    04. 코드 설명 및 실행 결과

     

    이제 Visual Basic 편집기를 실행하고, 현재 작업 중인 파일(프로젝트를 선택 후 오른쪽 클릭을 하여 모듈을 삽입한다)

     

     

    모듈에 다음과 같은 코드를 넣고 저장한다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    '매크로의 Sub으로 매크로의 정의를 시작한다.
    'RowCopy 부분에는 정하고자 하는 매크로의 이름을 쓰면 된다.
    Sub RowCopy()
     
        '현재 선택되어 있는 셀을 기준으로 밑으로 5줄 전체를 선택한다.
        ActiveCell.Rows("1:5").EntireRow.Select
        '선택된 영역에 빈 셀을 삽입한다. 셀은 밑으로 밀어내고, 왼쪽/상단의 포멧을 복사한다.
        Selection.Insert Shift:=xlShiftDown, CopyOrigin:=xlFormatFromLeftOrAbove
        '삽입된 영역에서 5줄 밑에 있는 행 전체를 선택한다.
        ActiveCell.Offset(50).EntireRow.Select
        '선택 영역을 복사한다.
        Selection.Copy
        '현재 선택된 영역에서 위로 5칸 이동한 후, 밑으로 5줄 전체를 선택한다.  
        ActiveCell.Offset(-50).Rows("1:5").EntireRow.Select
        '선택하여 붙여넣기 기본동작을 수행한다.
        Selection.PasteSpecial
     
    End Sub
    cs

     

    복사하고자하는 4번째 행의 첫 셀을 선택한 상태에서, 개발도구>매크로 버튼을 클릭한다.

    매크로 리스트중에 RowCopy를 선택하여 실행을 누른다.

     

    실행 후 의도하는 결과를 얻을 수 있는 것을 확인했다.

    728x90
Designed by Tistory.