powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Проверка по трём критериям
17 сообщений из 17, страница 1 из 1
Проверка по трём критериям
    #36291894
GioCH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача такая на Excel 2003- есть три дистрибутора у которых имеются свои водители, по три водителя на каждого. При оформлении заказа в бланк вводится фамилия дистрибутора и фамилия водителя, надо макросом проверить соответствует ли фамилия водителя своему дистрибутору, если нет то месиджбоксом вывести сообщение об не соответствии. Я хотел сделать так - If distr="name" then if driver<> "drname1" or "drname2" or "drname3" then msgbox("Проверте соответствые")
я точно не знаю как правильно записать это условие т.е. все водители проверялись на соответствие с дистрибутором макросом.
Спасибо!
...
Рейтинг: 0 / 0
Проверка по трём критериям
    #36291988
m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
m
Гость
а зачем макросом?... если же все таки хотите макросом, просто приделайте каждому водителю в конце цифру, соответствующую номеру дистрибъютора (которому тоже можете пределать цифру) и дальше сверяйте цифры в конце.
Например:
Дистрибъюторы:
Петров = Петров1
Иванов = Иванов2
...
Водители:
Иванченко = Иванченко1
Сидоров = Сидоров1
...

Код: plaintext
If right(distributor, 1 ) = right(voditel, 1 ) then
...
Рейтинг: 0 / 0
Проверка по трём критериям
    #36292339
GioCH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Отдельно проверять водителя не пойдёт, потому что если заказ выписан например на второго водителя или на третьего тогда проверка уже на первого водителя выдаст сообщение об ошибке ввода.
Надо проверить всех "сразу" - или водител1 или водител2 или водител3 и так для других дстрибуторов.
Если код пойдёт для одного дстрибутора то она будет работать и на других.
...
Рейтинг: 0 / 0
Проверка по трём критериям
    #36292423
m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
m
Гость
Ну так а я что говорю:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
dim voditel
dim disributor
dim  aD( 1  to  3 )
dim aV( 1  to  9 )
dim i as integer

aD( 1 ) = "Петров1"
aD( 2 ) = "Иванов2"
...

aV ( 1 ) = "Иванченко1"
aV ( 2 ) = "Сидоров1"
aV ( 4 ) = "Зеленый2"
...

voditel = cells(r,c).value
distributor = cells(r,c).value

For i =  1  to ubound(aD)
if voditel = mid(aV(i), 1 ,len(aV(i)- 1 )) then voditel = aV(i) exit for
next i

For i =  1  to ubound(aV)
if disributor = mid(aD(i), 1 ,len(aD(i)- 1 )) then voditel = aD(i) exit for
next i

If right(distributor, 1 ) <> right(voditel, 1 ) then
msgbox "Несовподение"
end if

код не проверял, но идея должна быть понятной
...
Рейтинг: 0 / 0
Проверка по трём критериям
    #36292559
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Другой вариант - меняем validation E4 в зависимости от значения ячейки D4

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
 Select Case [D4]
 Case "mmm"

    With [E4].Validation
    .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="m1,m2,m3"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = "please"
        .ErrorTitle = "stop"
        .InputMessage = "input drivers!"
        .ErrorMessage = "unknown driver"
        .ShowInput = True
        .ShowError = True
    End With

Case "hhh"
    With [E4].Validation
    .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="h1,h2,h3"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = "please"
        .ErrorTitle = "stop"
        .InputMessage = "input drivers!"
        .ErrorMessage = "unknown driver"
        .ShowInput = True
        .ShowError = True
    End With

Case Else
    With [E4].Validation
    .Delete
    End With
    [E4].Delete
End Select

End Sub
Т.е. дистрибюторы - mmm, hhh
водители - m1, m2, m3, h1, h2, h3
Добавить третью третию третюю третьую тьфу группу №3 :)...
Других вариантов быть не может (если только copy-paste)...
Подправить по вкусу :)
...
Рейтинг: 0 / 0
Проверка по трём критериям
    #36292579
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, на D4 тоже можно проверку навесить, тогда заполнить можно всё выбирая из выпадающего списка.
...
Рейтинг: 0 / 0
Проверка по трём критериям
    #36292803
m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
m
Гость
только что еще придумал, наверное самый простой
идея в том, что бы объеденить имя дистрибъютора и водителя а затем просто проверить в массиве:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
dim bChecker as boolean
dim sJoin as string
dim i as integer
dim  aА( 1  to n)

aA( 1 ) = "ПетровИванченко"
aD( 2 ) = "ИвановСидоров"
...
aD( 4 ) = "ИвановЗеленый"
...

bChecker = False
join = cells(r,c).value & cells(r,c).value

for i =  1  to n
if checker = aA(i) then bChecker = true 
next i

if bChecker = False then msgbox "Халепа :)"
...
Рейтинг: 0 / 0
Проверка по трём критериям
    #36293110
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вроде получилось удобно - добавил ещё примочку - если кликнуть по дистрибютору, водила сразу пропадает :) Т.е. больше нельзя заменить дистрибютора, но оставить прежнего чужого водилу.
Ну и список дистрибюторов и водителей легко редактировать - они в таблице.
Вариант рабочий, см. нижнюю часть.
...
Рейтинг: 0 / 0
Проверка по трём критериям
    #36293116
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В первом файле осталось удаление водилы при смене листа, лучше см. этот файл
...
Рейтинг: 0 / 0
Проверка по трём критериям
    #36293924
GioCH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем!
Я сделал так - добавил счётчик, если несовпадение имени водителя то счётчик=счётчик+1,
в конце если счётчик=3 (т.е. не совпали все три имени) то выходит сообщение об ошибке ввода.
Ваши варианты посмотрю, Спасибо!
...
Рейтинг: 0 / 0
Проверка по трём критериям
    #36293971
GioCH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно и так, более компактно
If distr = "name" Then If (driver <> "водит1") And (driver <> "Водит2") And (driver <> "Водит3") Then MsgBox ("Проверьте имя водителя")
...
Рейтинг: 0 / 0
Проверка по трём критериям
    #36311757
Фотография vikttur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно и так, без VBA :)
...
Рейтинг: 0 / 0
Проверка по трём критериям
    #36311770
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
viktturМожно и так, без VBA :) ??? А где Ваш вариант? Спасибо, что в моём красоту навели, конечно....
...
Рейтинг: 0 / 0
Проверка по трём критериям
    #36311777
Фотография vikttur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-Вставка-Имя-Присвоить
Для F13:
-Данные-Проверка-Список
-Условное форматирование
...
Рейтинг: 0 / 0
Проверка по трём критериям
    #36311781
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ах да, заметил - indirect добавилось...
...
Рейтинг: 0 / 0
Проверка по трём критериям
    #36311803
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, так конечно лучше, но не кардинально, согласись...
...
Рейтинг: 0 / 0
Проверка по трём критериям
    #36311809
Фотография vikttur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше или хуже - это уже решать применительно к конкретной задаче :)
Просто как пример.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Проверка по трём критериям
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]