Страницы: 1
RSS
Возможно ли использование массива в условиях оператора If...Then?
 
Задача данного участка кода проверить переменную на соответствие элементам из массива, и в случае совпадения выполнить один код, в случае если ни один из элементов не подошел выполнить другой код. Попытка использовать LBound и UBound дала ошибку синтаксиса. Похожих решений не нашел. Или так решить эту задачу нельзя? Спасибо
Код
 If переменная = одно из значений массива Then
         код 1
        Else
         код 2
 End If
Изменено: Николай Федоров - 19.02.2020 11:08:35 (добавил)
 
Код
for each val in массив
If переменная =val Then
trig=true
exit for
end if
next

If Trig then 
        код 1
        Else
         код 2
 End If
Изменено: БМВ - 19.02.2020 11:33:42
По вопросам из тем форума, личку не читаю.
 
можно через словари
Код
If dict.Exists(переменная) Then ...
Соблюдение правил форума не освобождает от модераторского произвола
 
buchlotnik, Тезка, и Collection also :-)
По вопросам из тем форума, личку не читаю.
 
БМВ, спасибо)
buchlotnik, этого еще не пробовал, пойду значит изучать)
 
Цитата
БМВ написал:
и Collection also
у collection  метода  exists нетуть, не люблю их за это  :evil:
Соблюдение правил форума не освобождает от модераторского произвола
 
Можно применить такую конструкцию в строке 1 #1:
Код
  If UBound(Filter(массив, переменная)) >= 0 Then
Владимир
 
БМВ, код срабатывает, но всегда выполняется условие Trig=True и выполняется код 1, не смотря на то что переменная  не равна val.
(хотел вставить код, но в массиве элементы на кириллице, и кодировка слетает)
 
Вы бы код целиком выложили, а то гадай что у вас там...
 
Цитата
buchlotnik написал:
у collection  метода  exists
метода нет, но обходные пути есть )))
 
Код
Dim b, sn, n, wcn As Long
Private Sub CBDelNorm_Click()
    Dim lUnit, lUnitOf As String, rangeKod As rangE, vCNullN, arrUnit, varrUnit As Variant, Trig As Boolean, lColUnit As Long
    sn = CLng(UserForm1.TBCol)
    wcn = CLng(UserForm1.TBWidth)
    Set rangeKod = Selection.Cells
    arrUnit = Array("Ãêàë", "ã", "êâ.äì", "êâ.ì", "êã", "êì", "êîìïë", "êóá.ì", "êóá.ñì", _
                    "ìë", "ë.", "ë", "ì", "íàáîð", "ïàð", "ðóë", "ò", "103 óñë. êèðï", "òûñ.øò; 1000øò", "óïàê", "øò")
    For Each vCNullN In rangeKod    'перебор строк в диапазоне
        lColUnit = ActiveCell.Column + 4
'        MsgBox lColUnit
        lUnit = vCNullN.Offset(0, lColUnit).Value    
'        MsgBox lUnit
        For Each varrUnit In arrUnit   'перебор по массиву 
            If lUnit = varrUnit Then
                Trig = True
                Exit For
            End If
        Next
        MsgBox Trig & lUnit & varrUnit
        If Trig = True Then
            lColUnit = lColUnit + 1
            For n = 1 To sn
                Do While Columns(lColUnit).Hidden = True
                    lColUnit = lColUnit + 1
                Loop
                
            Next n
        ElseIf Trig = False Then   'если значение не из массива
            
            MsgBox "false"
        End If

    Next vCNullN
End Sub

Часть переменных объявлена в области проекта.
Всегда получаю на выходе MsgBox Trig( всегда true) & lUnit(содержимое ячейки) & varrUnit(элемент массива) независимо от того что лежит в ячейке
Изменено: Николай Федоров - 19.02.2020 13:01:57
 
Цитата
Андрей_26 написал:
но обходные пути есть )))
да как бы в курсе, только зачем?
Соблюдение правил форума не освобождает от модераторского произвола
 
sokol92, ваш код заработал после некоторой доработки. пришлось вынести Filter в отдельную переменную, иначе была синтаксическая ошибка
Код
Fil= Filter(массив, переменная)

If UBound(Fil) = 0 Then
Изменено: Николай Федоров - 19.02.2020 15:48:06 (корректировка)
 
Оптимально словарь - одной строкой можно написать создание/наполнение (ну или функцию написать), одним словом
Цитата
Николай Федоров написал:
проверить переменную на соответствие элементам из массива
 
Hugo, действительно, словарь заработал без "бубнов" и с первого раза)
Страницы: 1
Наверх