1. FAQ
  2. 엑셀(Excel)
  3. AfterEffects
  4. Premiere
  5. Photoshop
  6. ETC

이 게시판은 아별닷컴 회원만 질문을 올릴 수 있습니다. 회원에게 주어지는 특권인셈이지요. 회원이 아닌 분들은 열람만 가능합니다.

안녕하세요. 아별님. 파이스입니다.

오늘은 그야말로 본격적인 VBA 첫 질문이 되겠네요. 그에 걸맞게 첨부파일을 동봉하겠습니다.


VBA를 공부하다가 다소 업무랑은 아주 아주 거리가 멀어보이는 예제들을 하나씩 하나씩

지겹지만 일단 포기하지는 않고 한번씩 읽어보고 한번씩 코딩해본다!라는 느낌으로 쭉 진행해 오다가,

드디어 업무와 연관되는 예제를 만나게 되고 그대로 해 보았으나 두둥~!!!!


원하는 결과의 절반밖에 얻지를 못했습니다.

에...목적은 첫번째 시트와 두번째 시트의 값을 비교해서

틀린부분에 색깔표시를 해주고 메시지박스로 틀린 부분의 갯수를 출력해주는 방식인데요,


첨부파일을 보시면 D열의 값은 전혀 반영이 되지 않고 있습니다!!!

분명 usedranage 속성과 rows.count column.count속성으로 D열까지 잡혔다고 생각이 드는데!!!

실제로는 B열과 C열까지만 반영이 되어 있습니다.


사실은 제가 예제를 그대로만 하면 재미가 없어서 제 맘대로 원본형태를 바꾸어놓고 공부를 하거든요;

그래서 그런지 첨부파일처럼 반쪽짜리 프로시저가 되어버렸습니다;


어...어디서 부터 잘못된 것일까요?


사실 업무를 하다보면 위와 같은 기능을 필요로 하는 경우가 종종 있어서요,

눈에 불을 키고 보고 있습니다. 역시 필요에 의한 학습욕구란 대단한것 같습니다.

하지만 따지고보면 VBA 자체도 필요에 의해 공부하기 시작한 거지만;;음..뭐랄까요

갑자기 이런부분은 그렇다면... 필요 중의 필요?ㅋ


감기 조심하십시오 ^-^


댓글 '3'

profile

[레벨:30]아별

2011.11.25 00:18:02
*.130.73.75

안녕하세요?

필요에 의한 공부가 최고입니다. ^^

 

책을 따라 공부할때도 예제대로 하는게 아니라 본인이 필요한 기능으로 구현해보는게 능력을 키우는 지름길이죠..

배움의 과정을 잘 이해하고 계신 것 같습니다.

 

maxr과 maxc의 변수 값 설정에 문제가 있습니다.

UsedRange는 항상 A1셀부터 시작되는 것은 아닙니다.

VBE창의 직접 실행창(Ctrl+G)에 아래의 코드를 입력하고 엔터를 쳐보세요.

? activesheet.usedrange.address
결과는 $B$2:$D$10으로 나옵니다. A1셀부터가 아닌거죠.. 저 영역의 가로 세로 크기는 3과 9 입니다.

Cells(3,9) 는 C9셀이므로.. D열이 제외되는 것입니다.

 

 

그래서 살짝 수정해본 코드입니다.

Option Explicit

Sub compareSheets()

    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim r As Long, c As Long
    Dim maxr As Long, maxc As Long
    Dim diff As Long

    Set ws1 = Sheets(1)
    Set ws2 = Sheets(2)

    maxr = ws1.UsedRange.SpecialCells(xlLastCell).Row
    maxc = ws1.UsedRange.SpecialCells(xlLastCell).Column

    diff = 0
    For r = 1 To maxr
        For c = 1 To maxc
            If ws1.Cells(r, c).Formula <> ws2.Cells(r, c).Formula Then
               diff = diff + 1
               ws1.Cells(r, c).Interior.ColorIndex = 3
               ws2.Cells(r, c).Interior.ColorIndex = 3
            End If
        Next c
    Next r

    MsgBox "다른셀의 개수 :" & diff

End Sub

 

 

첨부파일을 다운받아 실행해보세요.. ^^

다운 받기 : abyul.com_20111124_sheetCompare-1.xlsm

 

 

ps. 코드를 작성하실때는 제가 작성한 것처럼 보기 좋게 작성해야합니다.

For문을 중첩해서 사용하셨다면.. 각각의 들여쓰기를 달리해서 어떤 For문의 Next인지를 알 수 있게 해야합니다.

 

[ 읽기 편한 권장 코딩 ]

For r = 1 To maxr
    For c = 1 To maxc
           diff = diff + 1
    Next c
Next r

 

[ 읽기 불편한 코딩 ]

For r = 1 To maxr
For c = 1 To maxc
diff = diff + 1
Next c
Next r

 

첨부

파이스

2011.11.27 13:34:09
*.209.125.137

언제나 질문보다 답변이 풍성하여 질문자로서 120%의 만족 및 감사를 느낍니다.


문제에 대한 해결은 물론이고, 중첩된 구문의 경우 줄수를 줄일 수 있는 방법,

읽기 편하게 코딩할 수 있는 방법 등을 추가로 답변으니 코드를 통하여 배울 수 있었습니다.


더불어 이렇게 완벽하게 답변을 해 주시니, 별거 아닌거에 대해서는 질문하지 말아야지, 너무 수고스러우실 테니까

진짜 열심히 해보고 막히는 부분에 대해서만 질문해야지...라는 생각도 듭니다.


답변 정말 고맙습니다 ^-^. 질문이 완벽히 해소되었습니다.


profile

[레벨:30]아별

2011.11.28 11:00:51
*.104.126.21

하하..

제 답변이 마음에 들으셨다니.. 기분이 좋습니다. o(^^o)(o^^)o

 

코딩을 하실때 아래의 4가지를 주의해서 코딩하시면 되겠습니다.

    1. 가독성이 높은 코딩..

        => 들여쓰기 잘 하시고, 주석 잘 다시고, 의미 있는 변수명을 사용하시면 됩니다.

    2. 재활용이 가능한 코딩..

        => 반복되는 코딩은 별도의 프로시저로 만들어서 호출해서 사용하고,

              코딩을 하드코딩하지 않고 플랙서블하고 하시면 됩니다.

              Range("A2:F3")보다는 Range("A3").CurrentRegion라는 식이죠.. 이건 데이터 유형에 따라 다릅니다.

    3. 업데이트가 쉬운 코딩..

         => 변수를 잘 사용해야 업데이트가 용이합니다.

               외부 파일이나 레지스트리에서 설정값을 갖고 오는 방식을 사용하기도 합니다.

    4. 처리속도가 빠른 코딩..

         => 같은 결과라도 처리속도가 빠른 코딩이 있습니다. 공부가 필요하죠..

 

제대로된 공부 방향을 잡으신 것 같습니다.

무조건 질문부터 하기 보다는 먼저 고민을 많이 해보고.. 여러가지 방법을 스스로 시도해보는 것이 중요합니다.

그런 것을 연습하다보면.. 문제 해결하는 방법을 터득하게 됩니다.

따라하는 것보다 스스로 돌파구를 찾아보는 것이 가장 빠른 공부방법입니다.

 

화이팅입니다. ^^

문서 첨부 제한 : 0Byte/ 2.00MB
파일 제한 크기 : 2.00MB (허용 확장자 : *.*)
List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 공지 [공지] 아별닷컴의 엑셀 질문방 폐쇄합니다. 카페 질문방 이용하세요.. imagefile [레벨:30]아별 2015-04-23 42014
362 피벗테이블 엑셀 데이터 정리관련 문의~~~ [2] [레벨:2]flash 2011-12-30 2822
361 엑셀일반 엑셀 줄 간격에 대해서 [1] [레벨:3]빛의행운아 2011-12-28 8994
360 VBA 동적 데이터 교환 질문 [1] [레벨:3]바람 2011-12-27 2860
359 차트 피라미드 그래프 (그림 첨부) file [5] [레벨:3]읍내꽃미남 2011-12-16 4036
358 엑셀일반 신입 주제에 질문 먼저라 죄송합니다 ㅠㅠ file [3] [레벨:1]에봉이 2011-12-09 2879
357 VBA 아별님 안녕하세요 질문이 하나 있습니다 ^^ file [3] [레벨:0]하이버리 2011-12-09 2763
356 엑셀일반 2010 엑셀로 작업 2003엑셀 시트 복사가 안되요 [1] [레벨:2]리자딘 2011-12-09 3749
355 엑셀일반 질문하나 더 드립니다! [1] [레벨:4]나카타 2011-12-09 2817
354 엑셀수식 엑셀 작업 중, 질문사항! - 다중 조건의 합계 산출 방법(SUMIFS,SUMPRODUCT) [2] [레벨:4]나카타 2011-12-08 2926
353 아별툴관련질문 스타일 삭제 질문입니다. imagefile [1] [레벨:0]blueclip 2011-12-07 3391
352 아별툴관련질문 sheet 통합하기 file [1] [레벨:2]광택입니다 2011-12-06 2752
351 엑셀일반 혹시 이런것도 가능한가요? (간결한 2가지 질문) - VBA만 실행파일(.exe)로 만들 수 있는지 여부, 외부 파일명 일괄 변경 방법.. [2] [레벨:6]파이스 2011-12-02 4094
350 VBA 랜덤 출력 관련 짧고 간결(?)한 3가지 질문입니다. _ 중복 없는 랜덤 패스워드 생성하는 방법.. [4] [레벨:6]파이스 2011-11-29 6610
349 엑셀일반 매번 불편한 부분이 있어서 질문드립니다. _ 여러 행 또는 열을 한번에 삽입하는 방법.. [4] [레벨:4]알랑알랑♥ 2011-11-29 5580
348 배열수식 데이타 정열관련 질문 드립니다. _ offset과 배열 수식을 이용하여 최근 값을 순차적으로 갖고 오는 방법.. file [3] [레벨:1]바람길 2011-11-28 3785
347 엑셀일반 질문...^^ _ 선택 영역에서 빈셀만 모두 선택하여 특정 문자로 채우는 방법 [3] [레벨:4]나카타 2011-11-28 3866
346 VBA 갑자기 궁금해서 질문드리는건데요... _ VBA를 다른 오피스 프로그램에서 사용 가능한지..? [3] [레벨:6]파이스 2011-11-27 3222
345 VLookup 두개의 셀을 비교하여 같은값없애는 방법 file [3] [레벨:1]ak 2011-11-25 5438
» VBA 2개의 시트를 비교하여 다른 부분을 찾아내는 프로시저 질문입니다! file [3] [레벨:6]파이스 2011-11-24 4869
343 VBA 아별님 안녕하세요? 파이스입니다. _ 엑셀창과 VBE창 창전환 쉽게 하는 방법 [3] [레벨:6]파이스 2011-11-23 3509