값이 없을 때 발생하는 오류

값이 없을 때 발생하는 오류

"CPNEC"뿐만 아니라 다른 값에 대해 하나의 하위에서 아래 코드를 여러 번 사용하고 있습니다. 스프레드시트에 해당 값이 있는 범위가 있는 경우에는 잘 작동하지만 해당 값이 존재하지 않는 범위에 속합니다. 이것은 내 데이터에 특정 값이 없을 때가 있기 때문에 넘어지지 않고 다음 값으로 이동할 수 있도록 매달 사용하고 싶은 루틴입니다. 누구든지 나를 도와주세요.

Sub SelectCPNEC()
    ' Figure out where the "CPNEC" data starts.
    For nRow = 1 To 65536
    If Range("A" & nRow).Value = "CPNEC" Then
    nStart = nRow
    Exit For
    End If
    Next nRow

    ' Figure out where the "CPNEC" data ends.
    For nRow = nStart To 65536
    If Range("a" & nRow).Value <> "CPNEC" Then
    nEnd = nRow
    Exit For
    End If
    Next nRow
    nEnd = nEnd - 1

    'Select the range required

    Range("A" & nStart & ":G" & nEnd).Select

    'Now copy and paste into the right worksheet

    Selection.Copy
    Application.Goto ActiveWorkbook.Sheets("CPNEC").Cells(1, 1)
    ActiveSheet.Paste

End Sub

답변1

일치하는 값이 없으면 nStart기본값인 을 유지합니다 0. 이로 인해 이 줄에 오류가 발생합니다.

If Range("a" & nRow).Value <> "CPNEC" Then

A0유효한 범위 참조가 아니기 때문입니다 . 이 문제를 해결하려면(그리고 불필요한 루프를 방지하려면) nStart = 0첫 번째 루프 이후에 조건부 검사를 추가하세요. 0이면 하위를 종료합니다. 그렇지 않으면 계속하세요. 이렇게 하면 일치하는 항목이 없을 때 코드를 중지하는 오류를 방지할 수 있습니다.

Sub SelectCPNEC()
    ' Figure out where the "CPNEC" data starts.
    For nRow = 1 To 65536
    If Range("A" & nRow).Value = "CPNEC" Then
    nStart = nRow
    Exit For
    End If
    Next nRow

    If nStart > 0 Then
        ' Figure out where the "CPNEC" data ends.
        For nRow = nStart To 65536
        If Range("A" & nRow).Value <> "CPNEC" Then
        nEnd = nRow
        Exit For
        End If
        Next nRow
        nEnd = nEnd - 1

        'Select the range required

        Range("A" & nStart & ":G" & nEnd).Select

        'Now copy and paste into the right worksheet

        Selection.Copy
        Application.Goto ActiveWorkbook.Sheets("CPNEC").Cells(1, 1)
        ActiveSheet.Paste
    End If
End Sub

답변2

Excelllll이 설명합니다. 그러나 for 루프를 잘 처리하므로 각 셀에서 문자열을 검색할 수도 있고 매크로가 문자열을 찾으면 전체 행을 올바른 워크시트에 복사할 수도 있습니다. 값이 존재하지 않으면 오류가 발생하지 않습니다.

For Each cell In Range("A1: A65536")
    If cell.Value = "CPNEC" Then
        cell.EntireRow.Copy Workbooks.Open("otherWorkbook.xls").Sheets("Sheet1").Range("A1").End(xlDown).Offset(1, 0)
    End If
Next cell

"A1" 셀과 "A2" 셀에는 열 제목과 같은 일부 정보가 있어야 합니다. 정보를 붙여 넣을 첫 번째 빈 행을 찾습니다 .End(xlDown)..Offset(1,0)

관련 정보