#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