0

我有 Sheet2 数据(产品名称)按字母顺序按列排序,产生 26 列加上一列用于数字数据。在 Sheet1 上有一个近万个产品名称的列表,无论我们在 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

始终感谢您的宝贵帮助。

4

1 回答 1

0

我会使用一些快速而肮脏的东西,比如 hlookup,看看它是否返回一个值来确定它是否在 10,000 个产品中。

例如,假设在工作表 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))

于 2013-04-11T02:52:03.127 回答