Разбор отдельных ячеек Excel и извлечение информации - PullRequest
0 голосов
/ 03 марта 2020

Я хочу извлечь идентификатор продукта из каждой отдельной ячейки в определенном столбце. Вот как будет выглядеть содержимое этой ячейки:

3M? DBI-SALA® Ultra-Lok? Ведущий край Самовозворачивающийся мост, 3504500 C, 30 футов (9,1 м) оцинкованный стальной трос

Я хочу извлечь номер продукта "3504500 C" и указать его рядом с оригиналом клетка, которую я выложил выше. Хитрость заключается в том, что информация в каждой ячейке имеет свой формат, поэтому номер продукта не будет находиться в одном месте.

Если у меня есть полный список продуктов, есть ли способ, которым я могу поиск каждого продукта в полном списке по ячейке, и как только совпадение найдено, он вытянет товар и поместит его в соседнюю ячейку. Мне нужно, чтобы этот процесс выполнялся для каждой отдельной ячейки.

1 Ответ

0 голосов
/ 03 марта 2020

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

Private Const vbTextCompare As Long = 1

Public Function GetProductFromCell(Cell As Range) As String
    Dim CellParts   As Variant
    Dim CellPart    As Variant
    Dim ProductList As Object

    Set ProductList = GetProductList()
    CellParts = Split(Cell.Value, ",")
    GetProductFromCell = vbNullString

    For Each CellPart In CellParts
        If ProductList.exists(Trim$(CellPart)) Then
            GetProductFromCell = Trim$(CellPart)
            Exit Function
        End If
    Next

End Function

Public Function GetProductList() As Object
    Set GetProductList = CreateObject("Scripting.Dictionary")
    GetProductList.CompareMode = vbTextCompare

    'Add all products here
    GetProductList.Add "3504500A", "3504500A"
    GetProductList.Add "3504500B", "3504500B"
    GetProductList.Add "3504500C", "3504500C"
End Function
...