首页 > 解决方案 > Excel VBA - 使用 If 条件填充数组

问题描述

我正在使用此代码来填充一个工作正常的组合框。

  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 列中的所有值。

标签: excelvba

解决方案


现在您将一个范围加载到一个数组中,并且您希望通过该数组删除不需要的项目。我知道遍历数组比遍历单元格要快,但只是想提供一个也应该相当快的替代方案。

在此处输入图像描述

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

在此处输入图像描述

不幸的是,我们无法为数组或 combobox.list 分配非连续范围,因此我们必须遍历可见单元格并使用.AddItem.


推荐阅读