Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Проверка нескольких условий If then else - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Проверка нескольких условий If then else (Макросы/Sub)
Проверка нескольких условий If then else
DJ_Marker_MC Дата: Четверг, 19.02.2015, 12:06 | Сообщение № 1
Группа: Друзья
Ранг: Ветеран
Сообщений: 991
Репутация: 213 ±
Замечаний: 0% ±

Excel 2019
Всем доброе утро.
Друзья, помогите пожалуйста с оптимизацией кода.
В наличии имеется UserForm для входа в файл
В ней происходит банальная проверка двух совпадений Логин-Пароль, все работает все классно, но мне хотелось бы его немного улучшить.
вот сам кусок кода:
[vba]
Код
    If c = "М1" And t = "127" Then
          [a1] = 1
      ElseIf c = "М2" And t = "114" Then
          [a1] = 1
      ElseIf c = "М3" And t = "178" Then
          [a1] = 1
      ElseIf c = "М4" And t = "155" Then
          [a1] = 1
      ElseIf c = "М5" And t = "126" Then
          [a1] = 1
      ElseIf c = "М6" And t = "111" Then
          [a1] = 1
      ElseIf c = "М7" And t = "180" Then
          [a1] = 1
                  '''''''''''''''' ПРЕМИУМ ДОСТУП ''''''''''''''''
      ElseIf (c = "М8" And t = "138") Or (c = "М9" And t = "443") Or (c = "М10" And t = "198") Then
          [a1] = 2
      Else
          [a1] = 3
      End If
[/vba]

Как можно организовать тоже самое, но существенно сократив код, поскольку действий всего лишь 3, при выполнение первых 7 условий происходит одно и тоже действие - запись в ячейку а1 числа 1,
можно делать и так:
[vba]
Код
    If (c = "М1" And t = "127") or (c = "М2" And t = "114") or (c = "М3" And t = "178") or (c = "М4" And t = "155") or (c = "М5" And t = "126") or (c = "М6" And t = "111") or (c = "М7" And t = "180")  Then
          [a1] = 1
                  '''''''''''''''' ПРЕМИУМ ДОСТУП ''''''''''''''''
      ElseIf (c = "М8" And t = "138") Or (c = "М9" And t = "443") Or (c = "М10" And t = "198") Then
          [a1] = 2
      Else
          [a1] = 3
      End If
[/vba]

но подозреваю что есть более красивое решение...
Наставьте на путь истинный))) Заранее благодарен
К сообщению приложен файл: WTF.xlsm (18.4 Kb)
 
Ответить
СообщениеВсем доброе утро.
Друзья, помогите пожалуйста с оптимизацией кода.
В наличии имеется UserForm для входа в файл
В ней происходит банальная проверка двух совпадений Логин-Пароль, все работает все классно, но мне хотелось бы его немного улучшить.
вот сам кусок кода:
[vba]
Код
    If c = "М1" And t = "127" Then
          [a1] = 1
      ElseIf c = "М2" And t = "114" Then
          [a1] = 1
      ElseIf c = "М3" And t = "178" Then
          [a1] = 1
      ElseIf c = "М4" And t = "155" Then
          [a1] = 1
      ElseIf c = "М5" And t = "126" Then
          [a1] = 1
      ElseIf c = "М6" And t = "111" Then
          [a1] = 1
      ElseIf c = "М7" And t = "180" Then
          [a1] = 1
                  '''''''''''''''' ПРЕМИУМ ДОСТУП ''''''''''''''''
      ElseIf (c = "М8" And t = "138") Or (c = "М9" And t = "443") Or (c = "М10" And t = "198") Then
          [a1] = 2
      Else
          [a1] = 3
      End If
[/vba]

Как можно организовать тоже самое, но существенно сократив код, поскольку действий всего лишь 3, при выполнение первых 7 условий происходит одно и тоже действие - запись в ячейку а1 числа 1,
можно делать и так:
[vba]
Код
    If (c = "М1" And t = "127") or (c = "М2" And t = "114") or (c = "М3" And t = "178") or (c = "М4" And t = "155") or (c = "М5" And t = "126") or (c = "М6" And t = "111") or (c = "М7" And t = "180")  Then
          [a1] = 1
                  '''''''''''''''' ПРЕМИУМ ДОСТУП ''''''''''''''''
      ElseIf (c = "М8" And t = "138") Or (c = "М9" And t = "443") Or (c = "М10" And t = "198") Then
          [a1] = 2
      Else
          [a1] = 3
      End If
[/vba]

но подозреваю что есть более красивое решение...
Наставьте на путь истинный))) Заранее благодарен

Автор - DJ_Marker_MC
Дата добавления - 19.02.2015 в 12:06
Саня Дата: Четверг, 19.02.2015, 12:24 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
я б сделал так:

[vba]
Код
select case c & t
case "М1127", "М2114", "М3178"  ' , допишешь...  
    [a1] = 1
case "М8138"   ', и т.д.
    [a1] = 2
case else
    [a1] = 3
end select
[/vba]
 
Ответить
Сообщениея б сделал так:

[vba]
Код
select case c & t
case "М1127", "М2114", "М3178"  ' , допишешь...  
    [a1] = 1
case "М8138"   ', и т.д.
    [a1] = 2
case else
    [a1] = 3
end select
[/vba]

Автор - Саня
Дата добавления - 19.02.2015 в 12:24
_Boroda_ Дата: Четверг, 19.02.2015, 12:25 | Сообщение № 3
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
А если поискать
"_" & c & "," & t & "_"
здесь
_М1,127_М2,114_М3,178_М4,155_М5,126_М6,111_М7,180_?
Если нашлось, то 1


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеА если поискать
"_" & c & "," & t & "_"
здесь
_М1,127_М2,114_М3,178_М4,155_М5,126_М6,111_М7,180_?
Если нашлось, то 1

Автор - _Boroda_
Дата добавления - 19.02.2015 в 12:25
DJ_Marker_MC Дата: Четверг, 19.02.2015, 12:52 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 991
Репутация: 213 ±
Замечаний: 0% ±

Excel 2019
Саня, благодарю. именно то что хотел, сам пробовал через Select Case, но не додумался как правильно.
_Boroda_, Саша, по удобочитаемости, больше понравился все же Select Case
 
Ответить
СообщениеСаня, благодарю. именно то что хотел, сам пробовал через Select Case, но не додумался как правильно.
_Boroda_, Саша, по удобочитаемости, больше понравился все же Select Case

Автор - DJ_Marker_MC
Дата добавления - 19.02.2015 в 12:52
Rioran Дата: Четверг, 19.02.2015, 13:35 | Сообщение № 5
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
DJ_Marker_MC, привет!

Предложенные варианты хороши, но они сильно "программные". То есть, при необходимости менять права и доступы - надо будет вскрывать код, вспоминать, где в нём что. Хочу предложить более гибкий вариант: а что, если сделать совсем скрытый лист с двумя столбцами? В одном логин, в другом пароль. С помощью .Find или функции листа VLOOKUP ищем строку с указанным пользователем логином и проверяем, совпадает ли пароль на этой строке с введённым. Зона поиска может быть расширяемой автоматически. С таким вариантом администрирование будет куда проще и не будет возможной потери точности из-за сцепки, когда М1905 может быть связкой М19 и 05 или М1 и 905.

P.S. По Select Case у нас есть СТАТЬЯ, может чего ещё там интересного найдёшь =)


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
СообщениеDJ_Marker_MC, привет!

Предложенные варианты хороши, но они сильно "программные". То есть, при необходимости менять права и доступы - надо будет вскрывать код, вспоминать, где в нём что. Хочу предложить более гибкий вариант: а что, если сделать совсем скрытый лист с двумя столбцами? В одном логин, в другом пароль. С помощью .Find или функции листа VLOOKUP ищем строку с указанным пользователем логином и проверяем, совпадает ли пароль на этой строке с введённым. Зона поиска может быть расширяемой автоматически. С таким вариантом администрирование будет куда проще и не будет возможной потери точности из-за сцепки, когда М1905 может быть связкой М19 и 05 или М1 и 905.

P.S. По Select Case у нас есть СТАТЬЯ, может чего ещё там интересного найдёшь =)

Автор - Rioran
Дата добавления - 19.02.2015 в 13:35
DJ_Marker_MC Дата: Четверг, 19.02.2015, 13:47 | Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 991
Репутация: 213 ±
Замечаний: 0% ±

Excel 2019
Rioran, Идея хорошая и изначально (год назад когда был создан этот файл) я так и хотел сделать, тем более супер скрытый лист с перечнем пользователей к которому и привязан Combobox - существует, но знаний тогда не хватило это реализовать.
А сейчас особо не хотел заморачиваться, тем более пользователи крайне редко меняются. Но идея отличная и стоит ей заняться, если делать так, то можно и углубится дав возможность юзеру самому установить/сменить пароль....
Блин))) зачем ты мне про это напомнил))) придется делать... ато в голове сразу извращенные фантази начали мелькать что еще можно добавить.
А насчет сцепки все решается очень легко поставив между логин и пароль разделитель, например | (вертикальная линия)
 
Ответить
СообщениеRioran, Идея хорошая и изначально (год назад когда был создан этот файл) я так и хотел сделать, тем более супер скрытый лист с перечнем пользователей к которому и привязан Combobox - существует, но знаний тогда не хватило это реализовать.
А сейчас особо не хотел заморачиваться, тем более пользователи крайне редко меняются. Но идея отличная и стоит ей заняться, если делать так, то можно и углубится дав возможность юзеру самому установить/сменить пароль....
Блин))) зачем ты мне про это напомнил))) придется делать... ато в голове сразу извращенные фантази начали мелькать что еще можно добавить.
А насчет сцепки все решается очень легко поставив между логин и пароль разделитель, например | (вертикальная линия)

Автор - DJ_Marker_MC
Дата добавления - 19.02.2015 в 13:47
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Проверка нескольких условий If then else (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!