Если я все правильно поняла, то есть несколько вариантов решения такой задачи
я предложу возможно не самый удачный (по-быстрому))))
Он основан на использовании формулы поиска значения и проверки значения на ошибку
VLOOKUP(...) - поиск, FALSE - указывает, что если в искомом списке нет искомого значения, то возвращаем ошибку
ISNA(...) - проверка на ошибку Н/Д
IF(...) условие, если вернет ошибку, то возвращаем пустое значение, иначе возвращаем найденное значение
Код:
Sub nnnn()
Const STR_FORMULA As String = "=IF(ISNA(VLOOKUP(RC[-1],Лист1!C1:C2,2,FALSE)),"""",VLOOKUP(RC[-1],Лист1!C1:C2,2,FALSE))"
Dim i As Integer
Dim j As Integer
Dim iStart As Integer
Dim arr() As String
With ActiveSheet
iStart = .UsedRange.Row
i = iStart
Do While i < .UsedRange.Rows.Count + iStart - 1
If Len(.Cells(i, 1).Value) Then
arr = Split(.Cells(i, 1).Value, "::")
.Cells(i, 2).Value = STR_FORMULA 'то есть тупо вставляем формулу в столбец рядом
If UBound(arr) > LBound(arr) Then
.Cells(i, 1).Value = arr(0)
For j = 1 To UBound(arr)
i = i + 1
.Cells(i, 1).Insert xlShiftDown
.Cells(i, 1).Value = arr(j)
.Cells(i, 2).Value = STR_FORMULA
Next j
End If
End If
i = i + 1
Loop
End With
End Sub
Чем плох этот метод? Как минимум
1) Не факт что будет правильно работать с неотсортированной таблицей, по которой идет поиск
2) Могут быть варианты с написанием формул: русский / английский
3) Возникают проблемы, если нам нужно вставлять найденные значения в исходный столбец
Что еще можно использовать?
I) вместо написания формулы в виде строки вставлять уже готовое значение вызовом экселевских функций, например
Код:
.Cells(i, 2).Value = application.WorksheetFunction.VLookup(...)
это избавит от вариаций с языком рус/англ и значения можно подставлять в любой столбец, в т.ч. и исходный
II) написать свою функцию поиска
Удачи! Я надеюсь я не очень сумбурно описала варианты и правильно поняла вопрос :blink: