Excel vba:在另一个工作表中查找值

时间:2013-04-27 06:53:59

标签: excel excel-vba search vba

我正在尝试在sheet2(A1:DF5000)中找到来自sheet1的值。问题是值可以在sheet2中的任何位置。一旦发现匹配,还有一件事;让我们说sheet2 X495我需要它来返回sheet2 X1的值。

  1. 始终从搜索匹配
  2. 返回列
  3. 始终返回第1行
  4. 始终使用完全匹配
  5. 因此,如果我在搜索“ABC”并且在sheet2!D14中找到了完全匹配。它将返回值Sheet2!D1

    真实世界的应用:

    我正在使用excel跟踪我用于产品的所有sku。每个站点都需要一个独特的sku。所以我有数百个sku's都是相同的产品。所以我在excel中有一个主列表,第1行作为我的产品,然后每列都有每个产品使用的所有sku

    下面的代码正在运行,但发生了一些有趣的事情。事实证明它并没有寻找完全匹配,但它已经接近了。

    任何人都可以帮我解决这个问题吗?

    如果我不清楚,也可以随意问我任何问题。

    Function GetPart(text As Variant, rCells As Range)
      Dim txt As String
      Dim rRange As Range
      Dim SubjCell
    
      For Each rRange In rCells
        SubjCell = rRange
        txt = text
    
        If InStr(txt, SubjCell) <> 0 Then
          GetPart = SubjCell
          Exit For
        Else
          GetPart = "Not Found"
        End If
      Next rRange
    
    End Function
    

1 个答案:

答案 0 :(得分:0)

这是你在尝试什么?我已对代码进行了评论,以便您在理解代码时不会有任何问题:)如果您这样做,请告诉我。

Option Explicit

Function GetPart(rng As Range, rngDB As Range) As Variant
    Dim aCell As Range, strSearch as String

    GetPart = 0

    On Error GoTo Whoa:

    '~~> This is the value which we will search
    strSearch = rng.Value

    '~~> Notice the use of LookAt:=xlWhole. This is to ensure that we
    '~~> do not get False Positives. Using INSTR will give you False
    '~~> Positives. For example searching for "Coke" in "DigitalCoke"
    Set aCell = rngDB.Find(What:=strSearch, LookIn:=xlFormulas, _
    LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False)

    '~~> If the match is found
    If Not aCell Is Nothing Then
        '~~> Get value from the first row
        GetPart = aCell.Offset(-(aCell.Row - 1))
    End If

    Exit Function

Whoa:
End Function