Код VBA для сканирования через запятую значение в ячейке и получения значения поиска - PullRequest
0 голосов
/ 03 декабря 2018

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

enter image description here

Так что мне нужна функция для извлечения всех Задача (или любой другой тип выпуска, который может отличаться)из строки 2 столбец ссылок

ожидаемый результат: для A2 я хочу получить A4 и A6

Ответы [ 3 ]

0 голосов
/ 04 декабря 2018

Большое спасибо.Я добавил код в новый модуль и использовал функцию в качестве формулы.Я получил только 1 значение вместо 2 (просто получил А4, а не А6).enter image description here

0 голосов
/ 04 декабря 2018

Это то, что я изменил, чтобы вы могли настроить его для любого значения поиска

Функция GetLinkedItem (ссылка как строка, targetLinkType как строка) Dim temp (от 0 до 0) как строка GetLinkedItem = "Нет" ЕслиTrim (link) = "" Функция выхода затем

Dim links() As String, i As Long
links = Split(link, ",")
For i = 0 To UBound(links)
    'select the links that are targetLinkType
    Dim j As Long

    j = GetRow(Trim(links(i)))

    If Sheets("Data").Cells(j, ISUUETYPE_COL) = targetLinkType Then

        temp(0) = temp(0) & " " & Sheets("Data").Cells(j, ID_COL) & ","

    End If
   GetLinkedItem = Join(temp, ",")
   Next i

Функция завершения

0 голосов
/ 03 декабря 2018

Вы можете создать UDF для выполнения этого поиска.В новый модуль вашего VBE вставьте следующее:

Function getTasks(tasklist As Range, availabletasks As Range) As String
    'tasklist is the incoming array in Column C
    'availabletasks is the stuff in Column A

    'Array for output
    Dim tasks() As String: ReDim tasks(0 To 0)

    'Loop through each item in taslist using an array
    For Each task In Split(tasklist.Value, ", ")

        'Search availabletasks
        If Not availabletasks.Find(task) Is Nothing Then
            'pop the array
            If tasks(0) <> "" Then ReDim Preserve tasks(0 To UBound(tasks) + 1)
            tasks(UBound(tasks)) = task
        End If
    Next

    'Return what we found
    getTasks = Join(tasks, ", ")

End Function

Теперь в вашей электронной таблице вы можете использовать эту функцию, как обычную формулу:

=getTasks(C1,$A$1:$A$6) 

Где C1 имеетсписок, такой как A4, A25, A22, A6, A29, A42 и $A$1:$A$6, похож на ваш пример, столбец А. Это вернет A4, A6

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...