Ошибка времени выполнения: 13 отображается при просмотре строки # N / A - PullRequest
1 голос
/ 16 октября 2019

Я пытаюсь запустить приведенный ниже код, чтобы определить, есть ли в столбце A ключевое слово «SUP ID» или нет. Любой экземпляр SUP ID будет обновляться с номером 1 в соседнем столбце, а все остальное будет выглядеть как 0 . Однако при поиске слова # N / A появляется ошибка Run-Time Ошибка '13': несоответствие типов

Sub m()

For i = 2 To 10
    If Cells(i, 1).Value = "SUP ID" Then
        Cells(i, 2).Value = 1
    Else
        Cells(i, 2).Value = 0
    End If
Next i

End Sub

enter image description here

1 Ответ

2 голосов
/ 16 октября 2019

Вам нужно будет проверить наличие ошибки перед существующей, если:

Sub m()    
    With ActiveSheet        'Better to use actual sheet: WorkSheets("Sheet1")
        'load with all `0`
        .range("B2:B10").Value = 0
        For i = 2 To 10
            If Not IsError(.Cells(i, 1)) Then
                If .Cells(i, 1).Value = "SUP ID" Then
                    .Cells(i, 2).Value = 1
                End If
            End If
        Next i
    End with        
End Sub

Только с 9 ячейками для проверки вышеописанное будет работать быстро, но с увеличением диапазона количество раз, котороеvba обращается к листу, чтобы замедлить его.

Вы можете использовать массивы для ускорения.

Sub m()
    With ActiveSheet        'Better to use actual sheet: WorkSheets("Sheet1")
        Dim inputArr() As Variant
        inputArr = .Range("A2:A10").Value

        'Default of Integer is `0`
        Dim outputArr() As Integer
        ReDim outputArr(1 To UBound(inputArr, 1), 1 To 1) As Integer


        For i = LBound(inputArr, 1) To UBound(inputArr, 1)
            If Not IsError(inputArr(i, 1)) Then
                If inputArr(i, 1) = "SUP ID" Then
                    outputArr(i, 1) = 1
                End If
            End If
        Next i

        .Range("B2").Resize(UBound(inputArr, 1)).Value = outputArr
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...