Range의 속성에 대해 알아보고 있습니다. 이번에는 엑셀의 셀을 복사하거나 잘라내어 붙여 넣기 하는 방법에 대해 알아보겠습니다.
VBA Range의 NumberFormat 속성에 대해 알아보기
1. 복사하기
VBA에서 셀을 복사(Copy)하려면 Copy 메서드를 이용합니다. 사용하는 방법은 다음과 같습니다.
Range(셀 주소 또는 셀 범위).Copy 복사될 위치
괄호 안의 셀 주소 또는 셀 범위에 있는 데이터를 복사될 위치에 입력된 주소로 복사하게 됩니다.
2. 잘라내기
VBA에서 셀을 잘라내기(Cut)하려면 Cut 메서드를 이용합니다. 사용방법은 다음과 같습니다.
Range(셀 주소 또는 셀 범위).Cut 복사될 위치
괄호 안의 셀 주소 또는 셀 범위에 있는 데이터를 복사될 위치에 입력된 주소로 이동하게 됩니다.
복사하기와 잘라내기 메서드를 사용할 때 복사될 위치를 생략하게 되면 데이터는 클립보드에 데이터를 저장하게 됩니다. 이후에 원하는 위치에 저장된 데이터를 복사하거나 붙여 넣게 됩니다.
3. 붙여 넣기
클립보드에 저장된 데이터를 붙여 넣기 할 때 Paste 메서드를 이용합니다. 사용하는 방법은 다음과 같습니다.
ActiveSheet.Paste Destination:=Range(셀 주소)
괄호 안의 셀 주소로 클립보드에 저장된 데이터를 붙여넣기 합니다.
데이터를 클립보드에 저장한 상태에서 붙여 넣기를 하게 되면 같은 내용을 여러 곳에 붙여넣기 할 수 있게 됩니다. 엑셀에서 셀을 복사하기 위해 Ctrl + C를 클릭하면 선택한 셀의 주변이 점선으로 표시되는 것을 보실 수 있는데 이 상태에서 Ctrl + V 등을 이용하여 여러 위치에 복사할 수 있는 것을 생각하시면 됩니다.
그리고, 클립보드에 데이터를 저장하여 Paste 메서드를 이용하여 붙여넣기를 한 경우에는 반드시 다음과 같이 실행문을 작성하여 클립보드 복사를 위해 선택한 사항(선택한 셀 주변이 점선으로 표시)을 해제시켜 주어야 합니다.
Application.CutCopyMode = False
4. 예제를 통해 확인
이전 글에서 사용한 가계부를 통하여 VBA 메서드 셀 복사, 자르기 및 붙여 넣기를 확인해보겠습니다.
VBA Range의 SpecialCells 속성 이용하기
엑셀 시트에 ActiveX 버튼 하나를 생성하고 Caption에 '복사'라고 입력합니다. 그리고, 생성한 버튼을 마우스 왼쪽 버튼으로 더블클릭하면 VBE 창이 열리는데 코드 창에 다음과 같이 코드를 작성합니다.
Private Sub Button_Copy_Click()
Dim cell As Range
Set cell = Range(ActiveCell.Address)
Range(cell.Address).Copy Destination:=Range("H30")
End Sub
변수 cell을 선언하고 현재 선택되어 있는 셀의 주소(ActiveCell.Address)를 변수 cell에 입력하였습니다.
Range(cell.Address).Copy Destination:=Range("H30")
: cell에 입력된 주소의 데이터를 복사하여 H30 셀에 복사하라는 명령입니다.
코드를 실행하시면 선택하신 셀의 데이터가 H30 셀에 복사되어 붙여 넣기 되는 것을 보실 수 있습니다.
버튼을 하나 생성하시고 코드 창을 여신 후 아래와 같이 코드를 작성합니다.
잘라내기는 위의 코드에서 copy를 cut으로 바꿔주시면 됩니다. 그리고, 결과를 확인하기 위하여 붙여 넣기 하는 위치를 H31 셀로 바꿨습니다.
Private Sub Button_Cut_Click()
Dim cell As Range
Set cell = Range(ActiveCell.Address)
Range(cell.Address).Cut Destination:=Range("H31")
End Sub
코드를 실행하시면 선택하신 셀의 데이터가 H31 셀에 이동되는 것을 보실 수 있습니다.
이번에는 Paste에 대해 확인하는 예제입니다.
Private Sub Button_Paste_Click()
Dim cell As Range
Set cell = Range(ActiveCell.Address)
Range(cell.Address).Copy
ActiveSheet.Paste Destination:=Range("H32")
Application.CutCopyMode = False
End Sub
복사하기 코드에서 Destination을 지정하지 않아 클립보드에 데이터가 저장되게 하였습니다.
ActiveSheet.Paste Destination:=Range("H32")
: H32 셀에 클립보드에 저장된 데이터를 붙여 넣기 하도록 하였습니다.
Application.CutCopyMode = False
: 선택된 셀을 해제하는 명령입니다.
만약, 이 명령을 입력하지 않고 코드를 실행하면 붙여넣기 된 후에도 선택하였던 셀의 주변이 점선으로 표시되어 있는 상태로 유지되어 있는 것을 보실 수 있습니다. 그러므로, Paste 메서드를 사용하시는 경우 잊지 말고 선택을 해제해 주어야 합니다.
또한, 붙여 넣기할 셀 주소를 H32:H35와 같이 입력하시면 H32셀부터 H35셀까지 데이터가 붙여넣기 되는 것을 확인하실 수 있습니다.
'엑셀 > VBA' 카테고리의 다른 글
VBA 그림 복사 메서드 CopyPicture 알아보기 (0) | 2021.12.16 |
---|---|
VBA Range 메서드 PasteSpecial에 대해 알아보기 (0) | 2021.12.15 |
VBA Range의 NumberFormat 속성에 대해 알아보기 (0) | 2021.12.11 |
VBA Range의 End 속성 이용하기 (0) | 2021.12.11 |
VBA Range의 OFFSET과 RESIZE 속성 이용하기 (0) | 2021.12.11 |