将单元格组合成一个字符串,这样它们就可以用输入框搜索

Combine Cells into a String, so they are searchable with input box

我正在尝试根据现有工作簿创建 Excel sheet。我无法更改工作簿的格式,所以我坚持以下内容。

我们正在创建一个系统,使用带有包含员工姓名的条形码的手持扫描仪,以跟踪 COVID 测试。

我们的工作簿有一列用于名字,一列用于姓氏。

所以B2 = Cluff,C2 = Aaron

如何使用输入框(用于扫描仪)搜索字符串“Cluff, Aaron”(用户在框中输入,而不是代码中具体的名称)和 returns 行以上数据?

如果它打开一个新的输入框输入测试UPC(另一个输入查找字符串),并在同一行的AA列中输入,则加分。

我对VBA的了解非常有限。

我尝试对以下代码进行各种编辑:

Sub DualFind()

    Dim vFind1 As String, vFind2 As String
    Dim rFound As Range, lLoop As Long
    Dim bFound As Boolean
    Dim rLookIn1 As Range, rLookIn2 As Range

    vFind1 = InputBox("Find What: First value?", "FIND FIRST VALUE")
    If vFind1 = vbNullString Then Exit Sub

    vFind2 = InputBox("Find What: Second value?", "FIND SECOND VALUE")
    If vFind2 = vbNullString Then Exit Sub

    If Selection.Areas.Count > 1 Then
        Set rLookIn1 = Selection.Areas(1).Columns(1)
        Set rLookIn2 = Selection.Areas(2).Columns(1)
    Else
        Set rLookIn1 = Selection.Columns(1)
        Set rLookIn2 = Selection.Columns(2)
    End If

    Set rFound = rLookIn1.Cells(1, 1)
    For lLoop = 1 To WorksheetFunction.CountIf(rLookIn1, vFind1)
        Set rFound = rLookIn1.Find(What:=vFind1, After:=rFound, LookAt:=xlWhole)
        If UCase(rLookIn2.Cells(rFound.Row, 1)) = UCase(vFind2) Then
            bFound = True
            Exit For
        End If
    Next lLoop

    If bFound = True Then
        MsgBox "Match found", vbInformation, "ozgrid.com"
        Range(rFound, rLookIn2.Cells(rFound.Row, 1)).Select
    Else
        MsgBox "Sorry, no match found", vbInformation, "ozgrid.com"
    End If

End Sub

据我所知,它需要两个单独的输入来搜索列。我需要它用一个输入搜索两列。我想您必须将 B 列和 C 列编译成一个字符串,然后根据框中的输入进行搜索。

这是查找员工姓名的一种方法:

Dim ws As Worksheet
Dim rng As Range, m, staffName

Set ws = Worksheets("Staff")

staffName = "Cluff, Aaron"

m = ws.Evaluate("MATCH(""" & staffName & """,A1:A1000 & "", "" &B1:B1000,0)")

If Not IsError(m) Then
    Debug.Print "Matched on row " & m
Else
    Debug.Print "No match for " & staffName
End If

不完全确定这是否是您想要的,但希望它至少能给您一些更多的想法。我写这个是为了让用户以 [first name] [last name] 的格式输入搜索名称,例如亚伦克拉夫。根据您所写的内容,我假设姓在第 2 列中,名字在第 3 列中。

Sub Demo()
    Dim SearchName As String
    Dim UPC As String
    Dim LastRow As Long
    Dim Row As Long
    Dim RowMatch As Long
    Dim ColFirstName As Integer
    Dim ColLastName As Integer
    
    ColLastName = 2
    ColFirstName = 3
    
    SearchName = InputBox("Enter search name:  e.g. Aaron Cuff", "Search")

    If SearchName = "" Then Exit Sub
    
    SearchName = Trim(SearchName)
    
    LastRow = Cells(Rows.Count, ColLastName).End(xlUp).Row
    
    For Row = 1 To LastRow
        If StrComp(SearchName, Trim(Cells(Row, ColFirstName)) & " " & Trim(Cells(Row, ColLastName)), vbTextCompare) = 0 Then
            RowMatch = Row
            Exit For
        End If
    Next
    
    If RowMatch = 0 Then
        MsgBox "Search Name: " & StrConv(SearchName, vbProperCase) & vbNewLine & vbNewLine & _
               "No Match Found", vbInformation, "Search Result"
        Exit Sub
    End If
    
    UPC = InputBox("Enter Test UPC for " & StrConv(SearchName, vbProperCase) & ": ", "Input")
    
    If UPC <> "" Then
        Cells(RowMatch, "AA") = UPC
    End If
End Sub