Excel VBA - заполнить массив условием If - PullRequest
0 голосов
/ 05 июля 2019

Я использую этот код для заполнения комбинированного списка, который отлично работает.

  lastrow = ws.Columns("C").Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

    v = ws.Range("C" & ws.Range("start_row_pu").Row + 1 & ":" & "R" & lastrow).Value2

    For i = LBound(v) To UBound(v)
         v(i, 1) = v(i, 1) & ": " & Format(v(i, 6), "dd mmm yy") & " " & v(i, 5)
    Next i
    ReDim Preserve v(1 To UBound(v), 1 To 1)
    tag_combo.List = v

Я хочу добавить оператор If, чтобы в ячейку добавлялись только ячейки со значением "Post" в столбце 1.массив.Я попытался:

If v(i, 1) = "Post" then
v(i, 1) = v(i, 1) & ": " & Format(v(i, 6), "dd mmm yy") & " " & v(i, 5)
End if 

, но это приводит к тому, что список выпадающих списков по-прежнему загружает все значения только в столбце C.

1 Ответ

0 голосов
/ 05 июля 2019

Прямо сейчас вы загружаете диапазон в массив и хотите просмотреть массив, чтобы удалить ненужные элементы. Я знаю, что проходить через массивы быстрее, чем проходить через ячейки, но я просто хотел предложить альтернативу, которая тоже должна быть довольно быстрой.

enter image description here

Private Sub UserForm_Initialize()

With ThisWorkbook.Sheets("Sheet1")
    With Intersect(.UsedRange, .Columns(3))
        .AutoFilter 1, "Post"
        For Each cl In .Offset(1).Resize(.Rows.Count - 1).SpecialCells(12)
            Me.ComboBox1.AddItem cl.Value & ": " & Format(cl.Offset(0, 5), "dd mmm yy") & " " & cl.Offset(0, 4)
        Next cl
        .AutoFilter
    End With
End With

End Sub

enter image description here

К сожалению, мы не можем присвоить диапазон, не являющийся следствием, массиву или списку combobox.list, поэтому нам нужно просмотреть видимые ячейки и использовать .AddItem.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...