поиск Excel и показать ценность / данные с другого листа - PullRequest
0 голосов
/ 05 марта 2019

поэтому у меня есть Лист1, который используется для хранения списка моих данных инвентаризации.что я хочу сделать, это на другом листе (Sheet2).я могу искать в своих данных Sheet1 и отображать их там (например, когда я набираю cheetos, отображался только элемент cheetos).Помогите мне, ребята, с использованием VBA это нормально, или другой метод тоже хорошо.

this is the illustration of what i want to make

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Я бы рекомендовал избегать 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
0 голосов
/ 05 марта 2019

Если ваши результаты не должны быть на другом листе, вы можете просто преобразовать свои данные в таблицу.Выберите Ячейки A1: D8 и нажмите Вставить -> Таблица.Убедитесь, что «Моя таблица содержит заголовки», и вуаля!

После форматирования в виде таблицы вы можете отфильтровать идентификатор продукта, как вам нужно.

Если вам нужно показать эти результаты в другомлист, 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...