excel搜索并显示其他工作表中的值/数据

时间:2019-03-05 15:08:36

标签: excel vba

所以我有Sheet1,用于包含我的库存数据列表。我想做的是在另一张纸上(Sheet2)。我可以搜索我的Sheet1数据并在那里显示数据(例如,当我键入cheetos时,仅显示cheetos项目)。帮帮我,使用VBA可以,也可以使用其他方法。

this is the illustration of what i want to make

2 个答案:

答案 0 :(得分:0)

如果您的结果不必在其他工作表上,则可以将数据转换为表格。选择单元格A1:D8,然后单击插入->表格。确保单击“我的桌子有标题”,瞧!

格式化为表格后,您可以根据需要过滤产品ID。

如果您确实需要在另一张纸上显示这些结果,那么VBA将是我的首选解决方案。也许是这样的:

Public Sub FilterResults()
    Dim findText As String
    Dim lastRow As Long
    Dim foundRow As Long
    Dim i As Long

    'If there's nothing to search for, then just stop the sub
    findText = LCase(Worksheets("Sheet2").Range("D4"))
    If findText = "" Then Exit Sub

    'Clear any old search results
    lastRow = Worksheets("Sheet2").Cells(Rows.Count, 4).End(xlUp).Row
    If lastRow > 5 Then
        For i = 6 To lastRow
            Worksheets("Sheet2").Range("C" & i).ClearContents
            Worksheets("Sheet2").Range("D" & i).ClearContents
            Worksheets("Sheet2").Range("E" & i).ClearContents
            Worksheets("Sheet2").Range("F" & i).ClearContents
        Next i
    End If

    'Start looking for new results
    lastRow = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
    foundRow = 6

    For i = 2 To lastRow
        If InStr(1, LCase(Worksheets("Sheet1").Range("B" & i)), findText) <> 0 Then
            Worksheets("Sheet2").Range("C" & foundRow) = Worksheets("Sheet1").Range("A" & i)
            Worksheets("Sheet2").Range("D" & foundRow) = Worksheets("Sheet1").Range("B" & i)
            Worksheets("Sheet2").Range("E" & foundRow) = Worksheets("Sheet1").Range("C" & i)
            Worksheets("Sheet2").Range("F" & foundRow) = Worksheets("Sheet1").Range("D" & i)
            foundRow = foundRow + 1
        End If
    Next i

    'If no results were found, then open a pop-up that notifies the user
    If foundRow = 6 Then MsgBox "No Results Found", vbCritical + vbOKOnly
End Sub

答案 1 :(得分:0)

我建议避免在此过程中使用VBA,因为使用excel的功能可以很容易地做到这一点。如果您想通过VBA进行操作,则可以遍历产品列表并找到一个关键字,然后使用特定的通配符将“ Cheetos”包含在特定单元格值中,即可将其添加到数组中,如下所示:

可以根据需要对D4单元的更改进行修改,当然可以进行一些修改以确保可以根据自己的喜好进行格式化等。

Sub test()
Dim wb As Workbook
Dim rng As Range, cell As Range
Dim s_key As String, s_find() As String
Dim i As Long

Set wb = Application.ThisWorkbook


Set rng = wb.Sheets("Sheet1").Range("B2:B8")
s_key = wb.Sheets("Sheet2").Range("D4").Value
wb.sheets("Sheet2").Range("C6:F9999").clearcontents
i = 0

For Each cell In rng
    If cell.Value Like "*" & s_key & "*" Then
        ReDim Preserve s_find(3, i)
        s_find(0, i) = cell.Offset(0, -1).Value
        s_find(1, i) = cell.Value
        s_find(2, i) = cell.Offset(0, 1).Value
        s_find(3, i) = cell.Offset(0, 2).Value
        i = i + 1

    End If

Next cell


wb.Sheets("Sheet2").Range("C6:F" & 5 + i).Value = Application.WorksheetFunction.Transpose(s_find)

End Sub