2016-03-07 7 views
1

Я пытаюсь создать скрипт, который может удалить дубликаты в списке чисел. Только проблема, я продолжаю получать Subscript out of range (Error 9).Visual Basic: ошибка времени выполнения «9»: «Подстрочный код вне диапазона»

Sub remDupes() 
Dim units() As Variant 
For i = 2 To 37 
    Dim var As String 
    If ((Not Not units) = 0) Then 
     For x = 0 To 36 
      var = Cells(i, 22).Value 
      If (units(x) = var) Then 
       Range("V" & i, "AA" & i).Value = "" 
      Else 
       units(x) = var 
      End If 
     Next 
    End If 
Next 
End Sub 

Ошибки происходит:

If (units(x) = var) Then 

И я не знаю, почему

+1

Единицы измерения представляют собой массив переменных размеров, поэтому необходимо сохранить его в размере до сохранения в нем значения. Используйте 'Dim units (от 0 до 36) как Variant'. –

+0

Я не уверен точно, что вы пытаетесь сделать, но метод «RemoveDuplicates» объекта «Range» или использование объекта «Collection» или «Dictionary» может быть лучшим способом. –

+0

@RonRosenfeld Спасибо! Я смотрю вокруг уже довольно много часов, и ты первый предлагаешь это. –

ответ

0

Вы должны добавить следующую строку ниже перед строкой, которая вызвала ошибку.

ReDim Preserve units(0 To x) 

Новый код будет выглядеть следующим образом.

Sub remDupes() 
Dim units() As Variant 
For i = 2 To 37 
    Dim var As String 
    If ((Not Not units) = 0) Then 
     For x = 0 To 36 
      var = Cells(i, 22).Value 
      ReDim Preserve units(0 To x) 
      If (units(x) = var) Then 
       Range("V" & i, "AA" & i).Value = "" 
      Else 
       units(x) = var 
      End If 
     Next 
    End If 
Next 
End Sub 
+0

Я не очищаю свои обманы, но больше не сообщает об ошибке. –

 Смежные вопросы

  • Нет связанных вопросов^_^