【发布时间】:2018-09-17 17:19:05
【问题描述】:
我目前有一个 With 语句,它将一个单元格的值与一系列单元格进行比较,InStr() 返回 true,然后将 cell.Value 标记为“Yes",如果不是,则标记为 "No"。
这里是场景。假设我正在检查A2 的值,这是111。我将111 与一系列其他单元格进行比较,应该匹配的字段是111, 222, 333,因为它包含111。我下面的第一组代码适用于此,但速度很慢。我希望有一个更快的方法,我想我可以用一个公式来做到这一点,但是在 vlookup 中使用 True 而不是 False 并没有像我想象的那样工作。
代码如下:
With inv_twcg_ws
For Each cell In .Range("A2:A" & .Cells(Rows.Count, "A").End(xlUp).Row)
For Each cellx In report_rng
If InStr(cellx.Value, cell.Value) Then
cell.Offset(0, 6).Value = "Yes"
Exit For
End If
cell.Offset(0, 6).Value = "No"
Next cellx
Next cell
End With
问题是它有点慢。我的应用程序运行大约需要 5 分钟。我希望以某种方式将InStr() 与Application.Vlookup() 结合起来,以尝试加速公式。这可能吗?
这是我当前的 Vlookup,但使用 True 并不能满足我的需求...
With inv_twcg_ws
For Each cell In .Range("G2:G" & .Cells(Rows.Count, "A").End(xlUp).Row)
cell.Value = Application.WorksheetFunction.IfError(Application.VLookup(CStr(cell.Value), report_rng, 1, True), "No")
Next cell
End With
【问题讨论】:
-
最好读入数组并使用数组,然后写回工作表。
-
@QHarr 我擅长 Python 中的列表/数组,但我根本没有使用 VBA 中的数组。此时我需要对数组进行一些研究。
-
@QHarr 如果值在单元格中,Vlookup 中的
True不应该返回匹配项吗?还是我对True/False参数的理解有误? -
True 是相对的,因为它找到单元格按顺序排列的位置,并且查找列表必须按升序排序。
-
@ScottCraner 哦,我明白了。到时候我得再读一读。感谢您的信息。