【问题标题】:excel search and show value/data from another sheetexcel搜索并显示另一张表中的值/数据
【发布时间】:2019-03-05 15:08:36
【问题描述】:

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

【问题讨论】:

  • Excel 中有一个选项,高级过滤器可以让您根据给定条件过滤范围,在这种情况下,“Cheetos”查找它是否有帮助
  • 是的,高级过滤器实际上有帮助,你知道我如何对过滤值的数量求和吗?例如:我搜索多力多滋,然后只对包含多力多滋的行求和
  • 如果您只需要一个条件来过滤,您可以使用SUMIF;如果您需要多个条件来过滤您的总和,您可以使用SUMIFS

标签: excel vba


【解决方案1】:

如果您的结果不必在不同的工作表上,您可以将数据转换为表格。选择单元格 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

【讨论】:

    【解决方案2】:

    我建议在此过程中避免使用 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多