나눔터  
  HOME > 나눔터 > 묻고답하기 > 엑셀
엑셀
엑셀에 대한 질문과 답변을 올려주세요. 단, 취지에 맞지 않는 글은 운영자가 삭제합니다.
 "000 님, 도와주세요", "부탁 드립니다.", "급합니다!" 등과 같이 막연한 제목을 달지 말아주세요.
[필독] 빠르고 정확한 답변을 얻는 16가지 Tip !
[필독] 저작권법 개정에 따른 이용안내

작성자:  

 꼬닭간장 (sky1470k)

추천:  2
파일:     조회:  2991
제목:   VBA 데이터 비교하기 질문드립니다!
     
  * 답변하시는 분들께 도움이 되도록 자신의 환경을 아래 항목 옆에 기재해 주세요.

 - 엑셀 버전(95,97,2000,xp,2003,2007): Excel 2016

* 아래줄에 질문을 작성하세요 >>

안녕하세요. 최근에 VBA 를 알고 입문하게된 학생입니다.

엑셀로 두 파일을 비교해 누락된 데이터를 입력하여 저장하기를 원합니다.

제가 생각해본 알고리즘은
1. 직접 설정한 날짜에 해당하는 데이터를 불러와 현재 시트에 저장한다.
ex) "07 - 12 Data.xls"의 데이터를 현재 파일 sheet1에 저장.

2. 현재 시트의 데이터와 다른 파일의 데이터를 비교
ex) 현재 파일 sheet1의 모든 데이터와 외부 파일 sheet1의 데이터를 비교.

3. 두개의 셀이 일치하면 다른 셀의 값을 입력하여 저장
ex) 현재 파일 Cell(1,1)과 외부 파일 Cell(x,y)
    + 현재 파일 Cell(1,2)과 외부 파일 Cell(x,y+1) 이 모두 일치하면
    현재 파일 Cell(1,3)의 데이터를 외부 파일 Cell(x,y+2)에 입력하여 저장.

이렇게 해보고 싶습니다...ㅠㅠ

아는게 없어서 이것저것 검색하고 찾아보며 1번까지는 했습니다..
2,3번은 연결되는 이야기인 것 같은데, 2번을 하려고 검색을 해보니 현재파일과 외부파일간에 비교를 하는 코드는 없는 것 같아서..ㅠㅠ 2번에서 도움을 요청드리고 싶습니다. 혹은 더 편한 방법이 있다면 가르쳐주시길 바랍니다..
감사합니다.
 
[불량 게시물 신고]  
조삿갓엑셀의 파일 내에 있는 워크시트는
VBA에서 Worksheets 개체로 서로 구분하고 제어합니다.
Worksheets(2)는 두 번째 워크시트를 의미하고
(주의: Sheet2라는 이름을 가진 것이 항상 두 번째인 것은 아님)
Workseets("2")와 같이 문자열로 써 주면
"2"라는 이름을 가진 워크시트

그리고 특별히, ActiveSheet는
현재 선택되어 활성화되어 있는 워크시트를 의미합니다.

엑셀 파일 각각은 WorkBooks 라는 개체로 제어합니다.
즉, Workbooks 개체는 WorkSheets 개체의 상위 개체입니다.

컴퓨터에서 파일을 여는 순서에 따라
Workbooks(1), Workbooks(2), ... 등의 번호를 부여 받게 되고

현재 실행되고 있는 VBA 코드를 가지고 있는 워크북은
ThisWorkbook이라는 대명사를 쓸 수 있고

현재 선택되어 활성화되어 있는 워크북(실행 윈도가 맨 위에 있는...)은
ActiveWorkbook이 됩니다.

Workbooks(1).Name 을 참조하면
해당 워크북의 경로명과 파일명을 문자열로 받을 수 있습니다
07-12 (23:38)
삭제 ■신고
조삿갓3번은 다음과 같이 코딩하면 되겠지요.

If ThisWorkbook.Cells(1,1) = Workbooks(2).Cells(x,y) And _
    ThisWorkbook.Cells(1,2) = Workbooks(2).Cells(x,y+1) Then _
       Workbooks(2).Cells(x,y+2) = ThisWorkbook.Cells(1,3)
07-12 (23:46)
삭제 ■신고
조삿갓머리를 조금 쓰면,
ActiveWorkbook의 경우에는 앞에 워크북 번호를 생략하고
바로 Cells 개체를 지정해도 되니까
(광주에서 광주로 전화할 때 지역번호 062를 누르지 않아도 되는 것과 같은 이치임)

이 기법과 With 구문을 적절히 활용하면 코드를 간결하게
구성할 수 있습니다. 즉,

Workbooks(2).Activate   :' 외부 파일을 활성화시킴
With ThisWorkbook
If .Cells(1,1) = Cells(x,y) And _
     .Cells(1,2) = Cells(x,y+1) Then _
        Cells(x,y+2) = .Cells(1,3)
End With

설명:
.Cells와 같이 개체 앞에 .으로 시작하면
With 구문에서 지정한 개체의 소속이 되며

.도 없이 그냥 Cells로 생략해서 쓰면
현재 활성화된 워크북(파일)의 활성화된 시트 소속이 됨
07-12 (23:53)
삭제 ■신고
조삿갓그런데 시트 구조를 조끔만 바꾸어주면
골치아픈 VBA보다 VLOOKUP 워크시트 함수를 사용할 수도 있습니다.

양 파일에서 각각 데이터 테이블의 맨 왼쪽에 열을 하나 추가하여
A2 : B2&C2
외부파일 : Y2 : Z2&AA2

이런 식으로 두 열의 문자열을 결합하여 색인을 만듭니다.

외부파일
AB2 : =IFERROR(VLOOKUP($Y2,[07 - 12 Data.xls]Sheet1!$A:$D,4,0),"")

과 같이 사용하시면 됩니다.
07-13 (08:17)
삭제 ■신고
        
  

작성일 : 2017-07-12(01:00)
최종수정일 : 2017-07-12(01:00)