Excel 2007의 여러 시트에서 고유한 값을 강조 표시하려고 합니다.

Excel 2007의 여러 시트에서 고유한 값을 강조 표시하려고 합니다.

Sheet1"AR"로 이름을 바꾼 A열과 "여기에 붙여넣기"로 이름을 바꾼 A열의 값을 비교 Sheet2하고 다른 시트에 존재하지 않는 값이 포함된 행을 강조 표시하려고 합니다. (두 열 모두 빈 셀로 끝납니다.) 제가 여기에서 원했던 것과 비슷한 일을 한다고 생각되는 매크로를 찾았습니다.여러 Excel 시트에서 중복 레코드를 효율적으로 제거, 내 필요에 맞게 수정하려고 하는데 제대로 작동하지 않습니다. 현재 실행하면 Excel이 잠기고 Excel에서 작업을 종료해야 합니다.

이것이 내가 지금까지 가지고 있는 것입니다:

Option Explicit

Sub Compare2()
    Application.ScreenUpdating = False

    Dim startRow As Integer
    startRow = 1

    Dim row As Integer
    row = startRow

    Dim bRow As Integer

    'sharks below, cap'ain
    ' This loop is looping on row.
    ' Scan down column AR!A (i.e., Sheet1!A) until we find an empty cell.
    Do While (Worksheets("AR").Range("A" & row).Value <> "")

        Dim aVal As String
        aVal = Worksheets("AR").Range("A" & row).Value
        bRow = startRow             'I see thy booty

        ' This loop is looping on bRow.  Scan down column 'Paste Here'!A
        ' (i.e., Sheet2!A) until we find an empty cell.
        Do While (Worksheets("Paste Here").Range("A" & bRow).Value <> "")

            Dim aVal2 As String
            aVal2 = Worksheets("Paste Here").Range("A" & bRow).Value

            If (aVal <> aVal2) Then
                Worksheets("AR").Rows(row).Interior.ColorIndex = 6
                                ' we found a traitor; feed 'em to the sharks
                row = row - row
                Exit Do
            End If

            If (aVal2 <> aVal) Then
                Worksheets("Paste Here").Rows(row).Interior.ColorIndex = 6
                row = row - row
                Exit Do
            End If

            bRow = bRow + 1
        Loop

        row = row + 1
    Loop

End Sub

당신이 제공할 수 있는 어떤 도움이라도 도움이 될 것입니다.

답변1

수정을 시작하기 전에 잠식하고 있던 서브루틴을 더 잘 이해하지 못했다는 점은 유감입니다.

  • "WalkThePlank" 서브루틴은 다음을 찾고 있습니다.성냥. Sheet1의 행과 일치하는 행을 찾으면 Sheet2조치를 취합니다. 당신은 독특한 가치를 찾고 있습니다. 즉, 의 행은 Sheet1의 어떤 것과도 일치하지 않으며 Sheet2그 반대의 경우도 마찬가지입니다. 하지만 당신은 무엇입니까?행위일치하지 않는 행 쌍을 트리거합니다. 즉, Sheet1!Row 1일치하지 않으면 Sheet2!Row 1조치를 취합니다. 이는 시기상조입니다. 스캔해야 해모든 방법일치 여부를 Sheet2확인하기 위해Sheet1!Row 1어느행에 Sheet2.
  • "WalkThePlank" 서브루틴의 작성자는 별로 의미가 없는 일을 했습니다. 변수 에 의해 인덱싱된 행을 삭제한 후 row변수를 0으로 설정했습니다. 이는 서브루틴이 Sheet1이미 검사하고 고유하다고 판단한 모든 행을 다시 검사하게 하므로 낭비였습니다. 그러나 고유하지 않은(즉, bRow의 행과 일치하는) 행을 삭제하므로 Sheet2해당 행을 보지 않습니다.저것다시 행하면 무한 루프가 없습니다. 호기심을 더욱 가중시키기 위해 그는 이렇게 말할 수도 있었지만 row = 0, 대신에 아리송하게 말했다 row = row - row.

    하지만 그것을 바꿔야 합니다. (더 정확하게 말하면 루프 row = …내부의 명령문을 제거해야 한다고 생각합니다 Do While. 끝 부분을 제외하고는 row = row + 1.) 행을 삭제하는 것이 아니기 때문에 이 명령문은하다매크로를 다시 검사하게 만듭니다.동일한 데이터다시 반복하여; 즉, 무한 루프입니다. 당신 은 계속 행진 해야 합니다 Sheet1.

  • Ctrl+ 를 입력하여 Excel을 종료하고 데이터를 잃지 않고 VBA 무한 루프를 중단할 수 있습니다 Break. 키보드에 키가 없는 경우 을 실행 하고 을 클릭한 후 을 클릭하여 Break화상 키보드를 불러오세요 . 그래도 작동하지 않으면 다음을 시도하십시오 .oskCtrlPauseCtrlScrLk

슈퍼 유저는 스크립트 작성 서비스가 아닙니다. 지금 문제를 해결할 수 있을 만큼 무엇이 잘못되었는지 충분히 설명했다고 생각합니다. 그래도 작동하지 않으면 다시 돌아와서 문제가 발생한 부분을 알려주세요.

관련 정보