синтаксический поиск строки в столбце

#excel #vba

#excel #vba

Вопрос:

Думая об этом, мне может понадобиться какой-нибудь VBA, но если я смогу избежать этого, это было бы здорово.

У меня есть следующий лист Excel (см. Рисунок)

введите описание изображения здесь

Цель: я хочу поместить в столбец B результаты синтаксического поиска в столбце C, выполненного с помощью столбца A. В моем случае столбец B будет yes,tata,well таким, как столбец A имеет I2010 и т.д.

Я пробовал с помощью a, vlookup но vlookup нацелен на конкретную строку, например, I2010 или IS-IPI не является их частью.

Любые предложения приветствуются.

Спасибо

Комментарии:

1. Для этого вам понадобится VBA, поскольку он требует итерации по нескольким условиям.

2. Спасибо, Дэвид. Ouin ouin ouin …

3. Не уверен, что понимаю. Я не вижу «RT» в этой строке в A1. Я что-то упускаю?

4. Я допустил ошибку. Я внес изменения в свой пост.

Ответ №1:

использование

 andylookup(A1, C1:D4, "Not Found!")
  

Код:

 Function andyLookup(strInput As String, rngTable As Range, defaultvalue As String) As String
    Dim strArray() As String
    Dim i As Integer
    Dim strOut As String
    Dim temp1 As Variant

    strArray = Split(strInput, ",")
    For i = 0 To UBound(strArray)

        temp1 = Application.VLookup(strArray(i), rngTable, 2, 0)
        'if not found, apply default value
        If IsError(temp1) Then
        strOut = strOut amp; defaultvalue amp; ","
        Else
        strOut = strOut amp; temp1 amp; ","
        End If

    Next

    'remove trailing comma
    strOut = Left(strOut, Len(strOut) - 1)
    andyLookup = strOut

End Function
  

Результат

 yes,toto,tata,well
  

Комментарии:

1. Работает как бегун Дэнни. Однако, не могли бы вы немного объяснить, пожалуйста? Я новичок в мире vba brave.

2. Да, но не могли бы вы немного объяснить, пожалуйста?

3. strArray = Split(strInput, «,») — разделит строку «a, b, c, d» на массив из 4 элементов, где array(0) = «a», array(1) = «b», array(2) = «c» и т.д. Я перебираю массив и просматриваю значение одно за другим: если найдено, добавьте его в выходную строку, иначе добавьте аргумент: defaultvalue в качестве строки к выходу

4. Спасибо, Дэнни. Очень полезно.

Ответ №2:

В B1 введите:

  =IF(FIND(C1,$A$1)>0,D1,"")
  

Затем перетащите вниз. Это изменится в зависимости от того, что именно вы хотите сделать на своем листе. Потребуется больше разъяснений, чтобы адаптировать его к вашим потребностям, но это дает вам, по крайней мере, отправную точку.

Комментарии:

1. Спасибо @asp8811. Это могло бы сработать с помощью транспонирования и объединения столбцов, объединяемых запятой. Мммм…

Ответ №3:

Или с помощью VBA Find

 Sub Main()
MsgBox LookupStr(Range("A1"), Range("B1:B4"))
End Sub

Function LookupStr(rng1 As Range, rng2 As Range) As String
Dim rng3 As Range
Dim rng4 As Range
For Each rng3 In rng2
Set rng4 = rng1.Find(rng3.Value, , xlFormulas, xlPart)
If Not rng4 Is Nothing Then LookupStr = LookupStr amp; rng3.Offset(0, 1) amp; vbNewLine
Next
End Function