我有Sheet2的数据(产品名称)按字母顺序按列排序,产生26列加一列数字数据。在Sheet1上有一个近10,000个产品名称的列表,无论我们是否在Sheet2上都有这些产品。要一次搜索一个名称是一个热门问题,所以我想如果我们可以在Sheet1中批量搜索数据,并且每个单元格旁边的搜索结果将显示在Sheet2中找到该产品的单元格的地址,或未找到,例如:
SEARCH STRINGS SEARCH RESULT
Vodafone A4
Mirinda C105
Coca-Cola Y59
HeroHonda not found
Bournvita S27
Maggi not found
我已经做了一些搜索,找到了上面所需的类似代码,并在http://www.excelforum.com/excel-programming-vba-macros/714965-search.html找到了以下代码,它搜索了一个字符串。是否可以修改此脚本以获得所需的结果?
Sub DataSearch()
Dim Data() As Variant
Dim DstWks As Worksheet
Dim Food As String
Dim N As Variant
Dim R As Long
Dim Rng As Range
Dim RngEnd As Range
Dim SrcWks As Worksheet
Set SrcWks = Worksheets("Test 2")
Set DstWks = Worksheets("Test1")
R = 6
Food = DstWks.Range("E3")
N = DstWks.Range("E4")
If DstWks.Range("C6") <> "" Then
DstWks.Range("C6").CurrentRegion.Offset(0, 1).ClearContents
End If
Set Rng = SrcWks.Range("A4:E4")
Set RngEnd = SrcWks.Cells(Rows.Count, Rng.Column).End(xlUp)
Set Rng = IIf(RngEnd.Row < Rng.Row, Rng, SrcWks.Range(Rng, RngEnd))
ReDim Data(1 To Rng.Rows.Count, 1 To Rng.Columns.Count)
Data = Rng.Value
For I = 1 To UBound(Data, 1)
If Data(I, 1) = N And InStr(1, Data(I, 3), Food, vbTextCompare) > 0 Then
DstWks.Cells(R, "C").Resize(1, Rng.Columns.Count) = Rng.Rows(I).Value
R = R + 1
End If
Next I
End Sub
始终感谢您的宝贵帮助。
答案 0 :(得分:0)
我会使用快速和脏的东西,例如hlookup,看看它是否返回一个值来确定它是否在10,000个产品中。
e.g。假设在表2中,您的数据存储得如下:
- 每个产品记录在列中
- 不同的产品在不同的列中
- 产品名称在第1行,从A1开始
还假设在表1中,
- 产品名称在A列中,从A1开始
- 表格中没有其他数据
在工作表1中,将以下公式放入B2中(然后将其一直复制到B10001):
=IF(ISNA(HLOOKUP(A1,Sheet2!$A$1:$Z$1,1)),"not found",ADDRESS(1,MATCH(A1,Sheet2!$A$1:$Z$1,0),1))