[ 기초 강좌 ]
제 9강
복사에 대하여Ⅰ
VBA - 복사
그 사용법을 알아봅니다.
이럴 때 필요해요
"복사" , "붙여넣기" 를 수행하는 방법에 대해 알고 싶을 때
이렇게 사용해요
오늘은 VBA로 "복사"하여 "붙여넣기" 까지를 수행하는 방법에 대해 알아 보겠습니다.
※ 복사기의 "복사"와 엑셀의 "복사"는 같다???
여러분의 생각은 어떠신가요
"같다"라고 해도 틀린 것은 아닐 것 입니다. 또한 "같지 않다"라고 해도 틀린 것은 아닙니다.
"같다"라고 한다면, "원본과 같은(동일한) 사본을 만든다"는 것을 말하는 것이겠지요.
"같지 않다"라고 한다면 복사기는 원본에 빛을 쏘아, 동일한 형상의 사본을 만들고 엑셀에서의 복사는
선택한 개체(복사기의 원본과 같음) 를 컴퓨터의 메모리 영역에 임시로 저장했다가 사용자가 사본을 출력하고자
하는 위치에 원본과 같은 것을 출력해 준다 뭐 그런차이가 아닐까 생각합니다.
먼저 복사할 셀을 선택하고 "복사"한 다음, 사용자가 지정한 다른 셀에 "붙여넣기"하는 아래의
매크로 버튼(<방법1>)을 눌러 보시기 바랍니다.
<방법1>
가장 기본적인 방법으로써 매크로의 진행 과정은 다음과 같습니다.
Range("B25").Select 셀(B25)을 선택한다. Selection.Colpy 선택한 셀을 복사한다. Range("D25").Select ⇒ ?복사한 것을 붙여넣을 셀(D25)을 선택한다. ActiveSheet.Paste 복사한것을 붙여넣는다. Application.CutCopyMode = False 복사한 셀의 사방에 생긴 점선을 지워버린다. |
<방법2>
다음은 방금 출력한 D25셀의 내용을 지운 다음 위 <방법2>의 Macro 실행버튼을 눌러보시고 나타나는 결과를
비교해 보시기 바랍니다. 아마 <방법1>과 마찬가지의 결과가 나타 날 것입니다.
단지 차이가 있다면 소스가 아래와 같이 단 한줄로 코딩되어 있다는 것입니다.
Range("B25").Copy Destination:=Range("D25") |
?
<방법2>
5줄의 코드를 읽고 실행하는 것 보다는 한 줄의 코드를 실행하는 것이 수행속도면에서 빠를 뿐만 아니라 효율적입니다.
앞에서의 <방법1>과 같이 셀을 선택해서 복사하고 다시 붙여넣기 할 셀을 선택한 다음, 복사한 내용을 다시 붙여넣기
하는 것이 아니고 곧장 B25 셀을 복사해서 D25셀에 붙여넣기 합니다
위 코드에서 "Destination:="은 생략해도 무방합니다.
즉, Range("B25").Copy Range("D25")로 코딩해 주어도 같은 결과를 구할 수 있습니다.
참고로 제대로 하자면 Destination:=Worksheets("강좌").Range("D25")로 코딩해야 합니다만, 여기에서 시트명(Worksheet개체)
을 생략하면, 현재 열려 있는 시트(Active Sheet)를 기본 값으로 인식합니다.
또한, 현재 시트의 특정 셀의 갑을 다른 시트에 붙여넣기 하는 방법 역시 간단합니다.
먼저, 예제Sheet를 살펴 보시고 오시기 바랍니다.
<다른 시트에 붙여넣기> 버튼을 눌러 보시기 바랍니다.
앞서 설명드린 <방법2>의 코드에서 붙여넣기할 시트 및 셀의 주소만 지정해 주면 한줄의 코드로 해결됩니다.
Range("B61").Copy Destination:=Sheets(2).Range("C5") |
그런데 만약 붙여넣기할 셀의 위치를 다른 시트의 데이터가 없는 마지막 셀로 지정할 경우에는 어떻게 해야 할까요?
매크로버튼을 눌러 보시기 바랍니다.
?코드는 아래와 같습니다.
Range("B73").Copy Destination:=sheets(2).Range("A65536").End(xIUp).Offset(1,0) Sheets(2).Select Sheets(2).Range("A65536").End(xIUp).Select |
위 코드를 해석하자면
Range("B73").Copy Destination:=Sheets(2).Range("A65536").End(xIUp).Offset(1,0)
B73셀 값을 복사한 다음, 시트2(Sheet(2))의 A열 마지막 셀 (A65536) 위치에서 위쪽으로 데이터가 있는
셀(End(xIUp))을 선택하고 다시 한칸 아래의 셀 (Offset(1,0))에 값을 붙여넣기 하시오
Sheets(2).Range("A65536").End(xIUp).Select
시트2를 선택하고(실전에서는 별로 사용하지 않지만 강좌의 편의를 위해 지정했습니다.)
Sheets(2).Range("A65536").End(xIUp).Select
시트2의 마지막 셀을 선택하시요.
위 코드를 보다 세련되게 만들면 아래와 같이 할 수도 있습니다.
복사된 것을 붙여넣기할 위치를 기억시킬(참조시킬) 변수를 선언 변수의 데이터 형식은 셀을 참조할 것이므로 Range Object가 됨 Dim rngPosition As Range 시트2에서 데이터가 없는 마지막 셀을 변수에 참조시킴 Set rngPosition = Sheets(2).Range("A65536).End(xIUp).Offset(1,0) 붙여넣기할 위치에 변수 rnsPosition을 지정하면 끝 Range("B73").Copy rngPosition Sheets(2).Select rngPosition.Select |
이와 같이 변수를 사용하면 코드가 간결해지고 가독성이 훨씬 좋아집니다.
자 그런데 이쯤에서 매크로 기능을 사용하여 복사하고 붙여넣기를 할 수 있다면 혹시 WorkSheet에서의
[선택하여 붙여넣기]-[값], 또는 [선택하여 붙여넣기]-[수식]과 같은 기능도 실행할 수 있지 않을까?
라는 의문이 드실 수도 있습니다.
같은 결과가 출력되었습니다. 그러나 방금 결과값이 출력된 셀들을 차례로 선택해서 '수식입력줄'을 살펴 보시면
분명한 차이가 있음을 아실 수 있을것입니다.
<값 붙여넣기> Range("복사범위").Copy Range("붙여넣을 위치").PasteSpecial xIPasteValues Application.CutCopyMode = False 일단 범위를 복사하기 선택하여 붙여넣기(PasteSpecial) 값만 붙여넣기(xIPasteValues) 복사된 셀의 점선 테두리를 없애기 |
<수식 붙여넣기> Range("복사범위").Copy Range("붙여넣을 위치").PasteSpecial Paste:=xIPasteFormulas
일단 범위를 복사하기 선택하여 붙여넣기 - 수식으로 붙여넣기(xIPasteFormulas) 복사된 셀의 점선 테두리를 없애기
|
※위 두 코드의 차이점을 잘 살펴 보시기 바랍니다.
2. 다운로드 받은 콘텐츠는 본인(본인회사)만 사용할 수 있습니다.
3. 다른 사람과 공유하거나 원본 또는 수정 후 무단전제,무단배포,무단판매,무단 공유할 수 없습니다.
4. 웹상에서 배포는 상업,비상업적 목적을 불문하고, 손해배상등 가중처벌됩니다.