Это цикл for для поиска значений в диапазоне и создания нового массива, полного результатов совпадения. Проблема заключается в просмотре объекта, который я вижу в первом случае Если оператор AR2 (i) создает элемент AR2 (0), который пуст, тогда назначает AR2 (1) как значение If Else.VBA - ReDim Preserve, создающий ложный элемент массива
Sub rt()
Dim AR0() As Variant, AR1() As Variant, AR2() As Variant
Dim WS0 As Worksheet, WS1 As Worksheet
Dim i As Integer, RW0 As Integer, RW1 As Integer
Dim C As Range
Set WS0 = Sheets("lookup")
Set WS1 = Sheets("centro")
RW1 = WS1.Cells(WS1.Rows.Count, "A").End(xlUp).row
AR0 = WS0.Range("A3:A28")
For i = 1 To UBound(AR0, 1)
With WS1.Range("A2:A" & RW1)
Set C = .find(AR0(i, 1), LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext)
ReDim Preserve AR2(i)
If Not C Is Nothing Then
AR2(i) = "YES"
Else
AR2(i) = " - "
End If
End With
Next
WS0.Range("B3:B28") = WorksheetFunction.Transpose(AR2)
End Sub
Да, это так, как это работает, когда вы явно не устанавливаете нижний предел вашего массива, он устанавливает его на 0. В чем проблема? Вы можете явно установить его с помощью 'ReDim Preserve AR2 (от 1 до i)'. – RBarryYoung
по умолчанию массивы основаны на VBA. Поскольку вы запускаете счетчик в 1, первый элемент должен быть равен 0. Измените свою логику на любой из циклов от 0 до Ubound (AR0,1) -1 или вычтите один при заполнении массива. – sous2817
@ RBarryYoung - проблема в том, что я хочу перенести вновь созданный массив AR2 на лист, но в цикле AR (0) создается сначала как «пустой», тогда AR (1) присваивается значение, основанное на IF заявление. В конечном итоге транспонированный массив отключен счетчиком 1. – Jorge