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

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

[레벨:30]아별

2011.11.25 00:18

안녕하세요?

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

 

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

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

 

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

 

문서 첨부 제한 : 0Byte/ 2.00MB
파일 제한 크기 : 2.00MB (허용 확장자 : *.*)