-
VBA 유튜브 학습기 7 - 자동 복사, 붙여넣기의 모든 것(feat. 파워 문과 기획자)공부하는 노예/VBA(유튜브 무료 강의) 2021. 4. 5. 09:00728x90
엑사남 님 강의 7강 듣고 왔습니다.
저번주 금요일에 6강 들은 후에 주말 팽팽 놀고 돌아오니까 사실 앞에 내용이 기억이 잘 안 나요.....😂
그래서 진도 나가는 걸 쉬고 오늘은 복습을 해야 하나 생각했는데...
일단은 다 듣고, 다시 듣더라도 목표한 진도는 나가 보기로 합니다.
잘하는 짓이겠죠?
오늘 배운 내용은 복사, 붙여넣기에 대한 건데요.
Ctrl + C, Ctrl + V로만 살아온 인생.
이제 저도 VBA 코드를 작성해서 그걸로 뭔가를 해 볼 수 있는 날이 오나 봐요. 🤩
예제1. 텍스트, 수식, 서식 모두 복사 - 붙여넣기
위 이미지의 F6 : L18까지의 표를 텍스트, 수식, 서식을 모두 통째로 복사해다가 O6 셀에 붙여넣을 거예요.
범위 지정해서 컨트롤 + C, V로도 가능하겠지만 조금 더 뭔가 있어 보이게 처리해 보는 거죠. ㅋㅋㅋ
Sub Test01()
Range("F6").CurrentRegion.Copy
Range("O6").PasteSpecial
End Sub코드는 이렇습니다.
Range("F6").CurrentRegion.Copy 'F6셀을 시작으로 이어져 있는 모든 셀을 복사합니다.
* 셀.CurrentRegion : 해당 셀부터 이어져 있는 전체 범위
Range("O6").PasteSpecial 'O6셀에 복사한 것을 그대로 붙여넣습니다.
그리고 실행해 보면
이렇게 표가 그대로 복사돼 O6셀부터 붙여넣기 된 걸 볼 수 있는데요.
거슬리는 게 있죠?
복사한 표(F6 : L18) 테두리가 "여기 복사됐다." 라고 광고하고 있잖아요.
녹색 점선 테두리가 반짝이는 걸 전 몹시 거슬려 하고 있었는데요.
엑사남 선생님 완전 쪽집게.
바로 말씀해 주시더라고요.
코드에 무언가를 추가하면 저 반짝이는 테두리가 나타나지 않게 복사 - 붙여넣기가 가능하답니다.
방법을 알아보면,
Sub Test01()
Range("F6").CurrentRegion.Copy
Range("O6").PasteSpecial
Range("F6").Select
Application.Cutcopymode = false
End SubRange("F6").Select 'F6셀을 선택합니다.
Application.Cutcopymode = false '복사 모드를 취소합니다.
이 코드들을 추가해 주면 된다고 하네요.
코드를 추가하고 다시 실행해 보면
이렇게!
"여기를 복사했다!" 그런 표시 없이 복사 - 붙여넣기가 완료됐죠.
예제2. 값만 복사 - 붙여넣기
실무를 하다 보면 통째로 복사 - 붙여넣기보다는 값만 복사해 붙여넣는 걸 더 자주 쓰는 거 같아요.
저만 그런가요?
이 표는 K, L열에 전체적으로 수식이 적용돼 있었어요. 이렇게 엑셀 표 안에 수식이 적용될 때가 있잖아요.
수식은 됐고, 값만 가져다 쓰고 싶을 때.
그런 경우도 VBA 코드로 해결할 수 있습니다.
코드를 보면요.
Sub Test02()
Range("F6").CurrentRegion.Copy
Range("F6").PasteSpecial xlPasteValues
Range("F6").Select
Application.CutCopyMode = False
End Sub나머지 부분은 예제1과 동일한데
붙여넣기 부분만 코드가 좀 바뀌었습니다.
Range("F6").PasteSpecial xlPasteValues 'F6 셀에 복사한 걸 붙여넣는데, 값(Valuse)만 붙여 넣어라.
* 셀.PasteSpecial xlPasteValues : 값만 붙여넣음
이런 의미입니다.
코드를 실행해 보면
K7 셀을 찍어 보니 수식은 사라지고 값만 남았습니다. 이렇게 K열에 있던 수식이 사라지고, 값만 붙여넣어진 걸 확인할 수 있습니다.
예제3. 수식만 복사 - 붙여넣기
이번엔 반대로.
서식은 그대로 두고, 수식만 복사해 붙여넣고 싶을 때의 해결 방법인데요.
K열, 합계를 구하는 데 사용할 수식은 위 이미지처럼 K3 셀에 미리 작성을 해 놓고요.
L열, 평균을 구하는 데 사용할 수식은 위 이미지처럼 L3 셀에 미리 작성을 해 놨어요.
그럼 이제 각각 K3 셀과 L3셀의 수식을 복사 - 붙여넣기를 데이터가 있는 행의 개수만큼 반복하면 되겠죠?
그러기 위해선 데이터가 있는 행의 개수(데이가 입력된 마지막 행 번호)를 먼저 파악해야 합니다.
전에 배웠던 COUNTA 함수를 이용해 데이터가 입력된 행의 개수를 구해 봅니다. (위 이미지 B2 셀 수식 참고)
=COUNTA(F:F) + 5 'F열 전체에 텍스트가 입력돼 있는 셀의 개수를 구하고, 그 값에 5를 더해라.
* 5를 더하는 이유는 위에 셀 서식을 맞추기 위해(?) 비워두 1~5행이 있기 때문이에요.
기본 세팅을 해 두고 코드를 작성해 보면
Sub Test03()
Range("K3:L3").Copy
Range("k7:L" & Range("B2")).PasteSpecial xlPasteFormulas
End SubRange("K3:L3").Copy 'K3에서 L3까지의 범위를 복사해라.
Range("K7:L" & Range("B2")).PasteSpecial xlPasteFormulas
'복사한 것을 K7셀부터 L열까지 붙여넣는데 몇 행까지냐면 "B2"에 표기된 행까지 붙여넣는다. 붙여넣을 땐 수식(xlPasteFormulas)만 붙여넣어라.
* B2 셀엔 위에 보시면 아시겠지만, COUNTA 함수를 이용해 데이터가 입력된 셀의 개수를 카운트해 놓았습니다.
코드를 실행해 보겠습니다.
🤩👏
서식은 유지되면서 잘 붙여넣어진 거 같은데.
한번 확인해 보겠습니다.
K11 셀(랜덤으로 그냥 찍은 셀이에요.)을 확인해 보니, 위의 이미지처럼 수식이 아주 잘 복사됐습니다.
예제4. 값과 수식은 유지한 채로 서식만 복사 - 붙여넣기
이번엔 이미 입력돼 있는 데이터 값과 수식들은 그대로 유지하면서 서식만 복사해 붙여넣는 방법입니다.
저 같은 서식 디자인 집작 덕후에데 딱 맞는 팁이죠.
제멋대로 복사해다 붙여넣어서 테두리 사라지고 막 정렬 안 맞고 그런 거 너무 싫거든요.
이렇게 위의 이미지처럼 K열과 L열에는 합계와 평균을 구하기 위한 수식이 적용돼 있습니다.
이 수식을 유지하면서 F3 : L3 범위에 있는 서식만 복사해다가
F7 : L18 범위의 표에 적용하는 방법입니다.
마찬가지로 먼저, 데이터가 있는 행의 개수(데이가 입력된 마지막 행 번호)를 먼저 파악해야 합니다.
이젠 익숙해질 만도 한 COUNTA 함수를 이용해 데이터가 입력된 행의 개수를 구해 봅니다. (위 이미지 B2 셀 수식 참고)
=COUNTA(F:F) + 5 'F열 전체에 텍스트가 입력돼 있는 셀의 개수를 구하고, 그 값에 5를 더해라.
* 5를 더하는 이유는 위에 셀 서식을 맞추기 위해(?) 비워두 1~5행이 있기 때문이에요.
기본 세팅을 해 두고 코드를 작성해 보면
Sub Test04()
Range("F3:L3").Copy
Range("F7:L" & Range("B2")).PasteSpecial xlPasteFormats
End SubRange("F3:L3").Copy 'F3:L3 범위를 복사하라.
Range("F7:L" & Range("B2")).PasteSpecial xlPasteFormats
'복사한 걸 F7 셀부터 L열의(Range("F7:L") 행은 B2셀에 표기된 행만큼의 범위(& Range("B2"))에 붙여넣을 건데(PasteSpecial), 어떻게 붙여 넣느냐? 서식만 붙여넣어라.(xlPasteFormats)
이렇게 코드를 작성하고 실행해 봅니다.
일단 이렇게 서식은 잘 붙여넣기가 된 거 같습니다.
캡처는 깜빡 잊고 못했는데.... 기존에 수식이 입력돼 있던 L열의 아무 셀이나 찍어 보면 수식도 잘 살아 있습니다.
여기까지가 7강 학습한 내용이고요.
7강은 과제가 있었어요.
[과제]
E6:K18 범위의 표에서 성별이 남자이면 E2:I2 영역의 서식과 J2:K2 영역의 서식 + 수식을 적용하고,
성별이 여자이면 E3:I3 영역의 서식과 J3:K3 영역의 서식 + 수식을 적용하라. (1,000,000,000점😅)
어려워.........
전에 배웠던 For문과 If문을 활용하면 된다고 말씀해 주시더라고요.
감은 오지만 약간 막막했어요.
머리로만 생각해선 답이 안 나올 거 같으니 일단 시작해 봅니다.
우선 데이터가 입력된 표의 마지막 행 번호를 구해야겠네요.
앞에서 배운 대로 COUNTA 함수를 이용해 데이터가 입력된 마지막 행 번호를 구해 봅니다. (위 이미지 B2 셀)
=COUNTA(E:E)+5
여기까지 하고 한참의 시간이 흘렀습니다.🤣
시험이었다면 떨어졌을 거예요....ㅋㅋㅋ
Dim ..... 뭐뭐가 필요하지?
이렇게 삽질을 하다가 깨달음을 얻었습니다!
For문부터 작성....
중간중간 변수가 필요해지면 그때 Dim 변수 설정을 하기로 하고 작성하기 시작하니까 그래도 좀 감이 오더라고요.
최종 코드는 이렇습니다!
다른 분들 과제 해서 올리신 거 보니까 방법이 다양하더라고요.
어떤 분 코드는 제게 너무 고난도라 이해가 안 가기도 하는데... 우선 이렇게 초보적 마인드로 작성한 코드도 되긴 됩니다....^^;;;
Sub homework()
Dim i As Long
For i = 7 To Range("B2")
If Range("F" & i) = Range("D2") Then
Range("E2 : I2").Copy
Range("E" & i).PasteSpecial xlPasteFormats
Range("J2 : K2").Copy
Range("J" & i).PasteSpecial
Else
Range("E3 : I3").Copy
Range("E" & i).PasteSpecial xlPasteFormats
Range("J3 : K3").Copy
Range("J" & i).PasteSpecial
End If
Next i
Range("E6").Select
Application.CutCopyMode = False
End SubFor i = 7 To Range("B2") 'i는 7(행)부터 B2 셀에 표기된 숫자(행)만큼 반복할 거예요.
If Range("F" & i) = Range("D2") Then 'F열의 i행이 D2 셀과 같다면(즉, 셀 데이터가 "남"이라면)
Range("E2 : I2").Copy 'E2:I2 범위를 복사해라.
Range("E" & i).PasteSpecial xlPasteFormats '복사한 값을 E열의 i행에 서식만 붙여넣어라.
Range("J2 : K2").Copy 'J2:K2 범위를 복사해라.
Range("J" & i).PasteSpecial '복사한 값을 J열의 i행에 서식, 수식을 모두 붙여넣어라.
Else '만약 F열 i행이 D셀과 다르다면(즉, 셀 데이터가 "남"이 아니라면)
Range("E3 : I3").Copy 'E3:i3 범위를 복사해라.
Range("E" & i).PasteSpecial xlPasteFormats '복사한 값을 E열의 i행에 서식만 붙여넣어라.
Range("J3 : K3").Copy 'J3:K3 범위를 복사해라.
Range("J" & i).PasteSpecial '복사한 값을 J열의 i행에 서식, 수식을 모두 붙여넣어라.
쓰긴 썼는데(사실 중간중간 막혀서 컨닝도 조금 했어요....ㅋㅋㅋㅋ)
될까 싶었습니다.
그렇게 자신 없게 일단 실행해 봅니다.
되네요. 아주 잘!
100% 제 힘으로 과제를 해내진 못해서 좀 찝찝한데...
나중에 다시 백지 위에 해 보려고요.🙂
파워 문과의 머리로 여기까지 이해한 것만 해도 전 제 스스로가 자랑스럽거든요 ㅋㅋㅋ
이제 8강 들어야겠네요.
반응형'공부하는 노예 > VBA(유튜브 무료 강의)' 카테고리의 다른 글
VBA 유튜브 학습기 9 - 엑셀 열고 닫을 때 팝업 띄우기! 오픈, 클로즈 이벤트 (feat. 파워 문과 기획자) (0) 2021.04.09 VBA 유튜브 학습기 8 - 전체 지우기, 서식 지우기, 값만 지우기, 행과 열 삭제하기, IF문과 FOR문으로 삭제하기(feat. 파워 문과 기획자) (0) 2021.04.08 VBA 유튜브 학습기 6 - 입력된 값이 변할 때마다 테이터에서 해당 값을 찾아 서식 적용하기 (0) 2021.04.02 VBA 유튜브 학습기 5 - 데이터의 마지막 행과 열 자동으로 찾기 (feat. 파워 문과 기획자) (0) 2021.04.01 VBA 유튜브 학습기 4 - IF문 + For문 (feat. 파워 문과 기획자) (0) 2021.03.31