Проверка на вхождение элемента в список
Существует список значений (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
