Проверка на вхождение элемента в список

Существует список значений (x, y, z). Нужно заполнить ячейку в следующей колонке этими же значениями, если ячейка с первой колонки есть в списке. Если другое значение, то в ячейке нужно записать последнее значение, которое было выше

in out
x x
k x
y y
k y
k y
z z
x x
k x

(x, y, z) - определено, а k - любое значение, которое не равно (x, y, z)

Я знаю как заполнить, если есть совпадение, но никак не могу понять, как заполнить значения, что не совпадают

Sub test()
Columns(2).Insert
    Dim arr()
    arr = Array("x", "y", "z")
    For i = 10 To 2 Step -1
    If Not IsError(Application.Match(Cells(i, 1), arr, 0)) Then
        Cells(i, 2) = Cells(i, 1)
    Else
        Cells(i, 2) = "Erorr"
    End If
    Next
End Sub

Ответы (1 шт):

Автор решения: vikttur

Проще и быстрее формулой.

=ЕСЛИ(СЧЁТЕСЛИ($D$2:$D$4;A2);A2;B1)

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

Если первое значение не из списка, формула вернет заголовок out

Пример работы с циклами

Sub FindInList()
    Dim aData(), aList()
    Dim bFlag As Boolean
    Dim i As Long, n As Long
    
    aData = Range("A1:B10").Value
    aList = Range("D1:D4").Value
    
    For i = 2 To UBound(aData)
        For n = 2 To UBound(aList)
            If aData(i, 1) = aList(n, 1) Then
                bFlag = True: Exit For
            End If
        Next n
        
        If bFlag = True Then
            aData(i, 2) = aData(i, 1)
            bFlag = False
        Else
            aData(i, 2) = aData(i - 1, 2)
        End If
    Next i
    
    Range("A1:B10").Value = aData
End Sub
→ Ссылка