excel - 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 列中的所有值。
解决方案
现在您将一个范围加载到一个数组中,并且您希望通过该数组删除不需要的项目。我知道遍历数组比遍历单元格要快,但只是想提供一个也应该相当快的替代方案。
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
.
推荐阅读
- python - 如何从 CSV 的 HTML 页面中删除换行符 (\n)?
- python - ChromeDriver Chrome 版本错误和安装问题
- sql - 为什么我必须添加括号才能使工会工作
- google-cloud-platform - Google Cloud Function 限制开发者/编辑者对函数的访问
- python - 特定列的平均值并将它们存储在新列中
- python - 使用 Dropbox 时 Django 存储后端 url 模式错误
- python - 再次打印变量的结果,即使它已被更改
- javascript - 我如何实现要求用户在购买前先选择项目的 java 脚本验证?
- python-3.x - 如何在 4D Nifti MRI 图像上正确循环和绘图
- rundeck - 有没有办法让 rundeck 非特权用户更改自己的密码?