Excel VBA-使用If条件填充数组

时间:2019-07-05 11:01:45

标签: excel vba

我正在使用此代码填充可以正常工作的组合框。

  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语句,以便仅将第1列中值为“ Post”的单元格添加到数组中。我尝试过:

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 :(得分:0)

现在,您将范围加载到数组中,并且想要遍历数组以删除不需要的项目。我知道遍历数组比遍历单元格要快,但是我只是想提供一种替代方法,也应该很快。

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