【发布时间】:2018-08-06 17:40:15
【问题描述】:
关于这个问题:Find value in column and output in adjacent cell
目前,我正在使用带有InStr 函数的Select Case True 结构来搜索与关键字匹配的列中的单元格("Costco", etc),然后在偏移单元格中输出这些关键字。此外,没有这些关键字的单元格会突出显示,并且搜索不区分大小写。见以下代码:
Sub FindAndOutput()
Dim Col As Range
Dim FirstRow As Range
Dim rng As Range
Dim WorkRng As Range
Set Col = Application.InputBox("Select Column", "Obtain Object Range", Type:=8)
Set FirstRow = Application.InputBox("Select FIrst Row", "Obtain Object Range", Type:=8)
Set WorkRng = Range(Cells(FirstRow.Row, Col.Column), Cells(Cells(Rows.Count, Col.Column).End(xlUp).Row, Col.Column))
For Each rng In WorkRng
Select Case True
Case InStr(1, rng.Value, "Costco", 1) > 0
Cells(rng.Row, rng.Column + 1) = "Costco"
'Other Keywords
Case Else
Cells(rng.Row, rng.Column).Interior.Color = 65535
End Select
Next
End Sub
我一直想知道哪种 VBA 方法最适合此过程(执行时间最短,编写的代码更少),而不是搜索几个关键字,而是有数百个关键字。
我应该使用array 吗?如果是这样,我是否正确编写了下面的代码?
Sub FindVendorAndOutputVendor()
Dim Col As Range
Dim FirstRow As Range
Dim rng As Range
Dim WorkRng As Range
Dim Vendor As Variant
Set Vendor = Array("Costco", "Walmart") 'Add more vendors
Set Col = Application.InputBox("Select Column", "Obtain Object Range", Type:=8)
Set FirstRow = Application.InputBox("Select FIrst Row", "Obtain Object Range", Type:=8)
Set WorkRng = Range(Cells(FirstRow.Row, Col.Column), Cells(Cells(Rows.Count, Col.Column).End(xlUp).Row, Col.Column))
For Each rng In WorkRng
If InStr(1, rng.Value, Vendor, vbTextCompare) > 0 Then
Cells(rng.Row, rng.Column + 1) = Vendor
Else
Cells(rng.Row, rng.Column).Interior.Color = 65535
End If
Next
End Sub
我应该使用字典吗?如果是这样,有人可以指导我吗?
我应该坚持Select Case True 结构吗?
最后,如果我提出的部分解决方案都不是最好的,那么什么是最好的?
【问题讨论】:
-
数组可能是你最好的选择,但你的想法有点倒退。您想要做的是将
WorkRng作为一个数组获取,这样您就可以循环遍历内存而不是遍历工作表cpearson.com/excel/ArraysAndRanges.aspx