본문 바로가기
지난 게시글

[VBA] 엑셀 매크로 & VBA 기초(원하는 조건의 데이터를 다른 시트에 옮기기)

by yyDandy 2023. 4. 29.
반응형

안녕하세요. yyDandy 입니다.

 


1. 작업 이해하기

엑셀을 사용하다보면 필터(Filter) 기능을 자연스럽게 접하게 되는데요. 필터란 특정 조건에 맞는 데이터만 표시하는 기능이에요. 

 

 

이제 여기서 등급이 A인 행만 다른 시트로 옮기는 매크로를 해볼게요. 전 시간에 나왔던 매크로 기록 기능을 이용하여 필터를 A로 지정해주고, 해당 목록을 복사하여 원하는 곳에 붙여넣기를 해주세요.

Range("C6").Select
ActiveSheet.Range("$C$6:$E$11").AutoFilter Field:=1, Criteria1:="A"
Range("C7:E10").Select
Selection.Copy
Sheets("Sheet2 (2)").Select
Range("C7").Select
ActiveSheet.Paste

 

저기 코드를 그대로 복사해서 영역만 바꿔준다면 원하는 조건의 데이터를 다른 시트로 옮기기가 완성된답니다! 하지만 더 궁금하신 분은 이어서 봐주세요. 응용하는 방법을 알려드릴게요.

 

2. 응용하기

우선 코드를 수정해서 간단하게 줄여볼게요.

Range("C6").AutoFilter Field:=1, Criteria1:="A"
Range("C7:E10").Copy Sheets("Sheet2 (2)").Range("C7")

Select이 끝나고 바로 뒤에 Selection이 붙는 경우에는 코드를 줄일 수 있어요. AutoFilter 역시 앞에 적힌 Select을 없애고 한 줄로 쓸 수 있어요. 그리고 Copy  한 후에 바로 옆에 Sheets를 적어주면 붙여넣을 정도를 복사 코드 바로 옆에 구성할 수 있어요. 이렇게 하면 코드가 훨씬 간결해지고 보기 좋아지기 때문에 코딩의 효율이 높아진답니다. 

 

그 다음으로 할 일은 동적범위 참조하는 것인데요. 동적범위라고 하면 데이터 조건 범위가 달라지면 이에 따라 대응하는 것인데요. 위의 코드에서는 E10까지 밖에 범위가 되지 않았기 때문에 E11이 나오는 순간 데이터의 신뢰성과 정확도가 0이 될 수 밖에 없어요. 따라서 이 범위를 엑셀의 끝 번호까지 늘리게 되면 아무리 범위가 커져도 수정이 필요없게 돼요. 하지만 정확한 범위까지만 설정해야 할 때도 있겠죠? 그럴 때는 아래처럼 해주면 되는데요.

Range("C6").AutoFilter Field:=1, Criteria1:="A"
Range("C7",Cells(Rows.count, "E")End(xlUp)).Copy Sheets("Sheet2 (2)").Range("C6")

 

반응형

 

해당 코드에서는 E행의 마지막에서 컨트롤 + 방향키 위를 해서 전 범위를 복사하는 코드에요. 주의 할 점은 해당 기능을 실행하면 제목까지 함께 복사가 되기 때문에 붙여넣는 위치 역시 한 칸 당겨주는 센스가 필요해요.

 

그리고 다음으로 할 작업이 있어요. 해당 코드에서는 A의 등급을 가진 데이터만 불러올 수 있어요. 그렇다는 말은 B나 C를 가져오고 싶은 경우에는 코드를 매 번 수정해야 한다는 점이에요. 이럴 때는 참고 셀을 지정하고 그 셀에 맞게 값이 연동되도록 코드를 수정하는 작업을 해줘야겠죠?

Range("C6").AutoFilter Field:=1, Criteria1:="=Range("D4").Value"
Range("C7",Cells(Rows.count, "E")End(xlUp)).Copy Sheets("Sheet2 (2)").Range("C6")

제가 예제로 만든 엑셀에서는 D4에 A, B, C를 표시할 수 있는 셀을 지정했어요. 그리고 필터에서 Criteria1 값을 D4로 지정한다면 해당 셀만 바꾸면 이 특정 데이터 복사하기 매크로는 작동할 수 있게 되는 것이랍니다.

 

이렇게 오늘은 원하는 데이트를 붙여넣는 방법에 대해 알아봤습니다!! 다음에도 유익한 내용을 챙겨올게요.

반응형