본문 바로가기
지난 게시글

[VBA] 엑셀 매크로 & VBA 기초(다른 파일의 데이터 가져오기, 특정 데이터 가져오기)

by yyDandy 2023. 4. 27.
반응형

안녕하세요. yyDandy 입니다.

 

 

 


 

1. 다른 파일의 데이터 가져오기

엑셀을 사용하면서 다른 파일의 데이터가 필요한 경우가 많은데요. 그럴 때 보통 그 파일을 열어서 Ctrl + C 를 해서 옮기는 경우가 대부분이에요. 하지만 이 역시 반복 작업이라는 점을 생각하면 매크로와 VBA 기능을 이용하여 자동화할 수 있는데요. 한가지 예제를 들어서 시작해볼게요.

이렇게 A엑셀에 있는 성과급을 B엑셀에 등급 별로 성과급 합을 구하는 것을 해볼게요. 물론, 이렇게 데이터 셀의 수가 적으면 그냥 하는 게 편할 수 있지만, 보통 회사라면 100명 이상을 만지는 경우가 있고, 등급도 다양하고, 직급에 따라 또 달라지기 때문에 활용하기 좋아요. 

 

매크로 기록 기능을 활용할건데요. 코드는 직접 짜면 멋있고 재미(?)도 있겠지만, 사실 실무에서는 속도나 정확하게 하는 것이 더 중요하기 때문에 기능을 활용하여 기본적인 틀을 짜놓고 어느 정도 필요에 따라 조금씩 수정하는 게 더 좋아요.

 

 

하단의 매크로 기록을 먼저 눌러주세요. 그 뒤에 A엑셀의 성과급 탭 100~80까지 3개를 복사해서 B엑셀의 맞는 영역에 복사-붙여넣기를 해주세요. 

 

Range("G8:G10").Select
Selection.Copy
Windows("통합 문서3").Activate
Range("J8").Select
ActiveSheet.Paste

 

 

기본적인 구성은 이렇게 돼요. 이제 보면 이해가 되실텐데요. G8:G10을 선택해서 복사하고 통합문서3(엑셀B)의 J8 영역에 붙여넣는다는 것이죠. 하지만 여기서 문제가 있어요. 저희는 B엑셀을 열지 않고, 붙여넣는 게 목표 였으니까요. 파일을 여는 기능부터 추가를 해야한다는 점이죠.

 

Workbooks.Open Filename:="C:\Users\바탕 화면\yyDandy\B엑셀.xlsx" 
Range("G8:G10").Select
Selection.Copy
Windows("B엑셀.xlsx").Activate
Range("J8").Select
ActiveSheet.Paste
ActiveWindow.Close

 

먼저 엑셀을 키는 것을 해볼게요. 키는 방법은 Workbooks.Open Filename:="경로" 라는 코딩을 해주시면 돼요. 경로 확인 방법은 엑셀이 있는 폴더 주소를 그대로 붙여넣기를 해주시면 됩니다. 그 뒤에 파일 이름을 붙여주세요. 파일에는 확장자까지 더해줘야 돼요. 그러면 이제 엑셀이 켜지게 돼요. 그 뒤에 Selection.Copy까지는 쉽죠?

 

그 다음은 Windows("B엑셀.xlsx").Activate 를 추가해주세요. 이 매크로는 현재 A엑셀에서 시작되고 있잖아요? 그렇기 때문에 위에 Selection.Copy까지는 A엑셀에서 시행되고 있는 거에요. 하지만 Activate를 통해 B엑셀에서 실행될 수 있도록 바꿔주는 것이죠. 그러면 뒤에 Range("J8")과 PasteB엑셀에서 진행되겠죠? 그리고 마지막 ActiveWindow.Close를 통해 B엑셀을 닫아주면 끝이랍니다. F5를 눌러서 해당 매크로를 실행해보면 B엑셀에 원하는 결과를 볼 수 있어요.

 

하지만 파일에 대한 경로는 사용하고 있는 PC에서만 사용할 수 있어요. 하지만 USB나 다른 이동매체를 통해 쓰기 위해서는 경로를 항상 바꿔줘야 하잖아요? 그럴 땐 첫 줄을 바꾸면 돼요. 경로를 ThisWorkbook.Path & "\B엑셀.xlsx"으로 바꾸면 된답니다.

 

반응형

2. 현재 시점에 맞는 위치 값 가져오기

다음으로는 위치 값을 바꾸는 방법을 알려드릴게요. 앞서 말한 성과급이 2023년 자료라면 2022년, 2021년 자료를 모아야 할 때도 있고, 급여라면 매달 데이터를 가져와야 하잖아요? 그럴때는 위치 값 코드를 수정해주면 쉽게 해결할 수 있어요.

 

Workbooks.Open Filename:="C:\Users\바탕 화면\yyDandy\B엑셀.xlsx" 
Range("G8:G10").Select
Selection.Copy
Windows("B엑셀.xlsx").Activate
Range("G8").Select
ActiveSheet.Paste
ActiveWindow.Close

위 엑셀을 보면 G8에 붙여넣기를 하게 되어 있는데요. 만약 2021년 자료라면 H8에 붙여 넣기만 하면 되는 거에요.  

 

Workbooks.Open Filename:="C:\Users\바탕 화면\yyDandy\B엑셀.xlsx" 
Range("G8:G10").Select
Selection.Copy
Windows("B엑셀.xlsx").Activate
Cells(8,"H").PasteSpecial
ActiveWindow.Close

Cells(8,"H")는 Range(H8)과 같은 의미를 가지고 있어요. 다음으로는 H를 자동으로 추적할 수 있도록 만든다면 더욱 편리해지겠죠? 단순히 Year(Date)-1 등의 함수로 바꿔주기만 해도 2022년 자료로 바뀌고 -2를 한다면 2021년 자료가 나오고 그렇게 되겠죠? 하지만 A엑셀 속 특정 셀에 해당 값을 적어주고 그 셀을 추적하게 한다면 -1, -2가 아닌 시트 속에서 특정 셀만 바꿔도 추적이 가능하도록 더 편리하게 자동화를 할 수 있게 된답니다. 이건 다음에 배워볼게요 !!

 

 

반응형