Есть ли способ выполнить несколько проверок в Excel, используя VBA - PullRequest
0 голосов
/ 20 января 2020

Я хочу проверить значения в диапазоне нескольких ячеек, изменяя данные в моей текущей ячейке в зависимости от результата. Мой метод ниже работает, но плохо. Моя цель - установка с несколькими проверками (по одной для каждого критерия) или с одной функцией, которая проверяет каждый критерий.

На рисунке ниже показана текущая настройка, которую я выполнил в каждой ячейке. В столбце AT у меня есть следующая формула:

=IFERROR(IF(ISNUMBER(SEARCH("Zero Ticket Booking",AS126)),"Zero Ticket Booking",IF(ISNUMBER(SEARCH("Refunded Booking",AS126)),"Refunded Booking",IF(ISNUMBER(SEARCH("Automatic Cancellation",AS126)),"Automatic Cancellation",IF(ISNUMBER(SEARCH("Nagios Booking",AS126)),"Nagios Booking",IF(AND(ISNUMBER(SEARCH("Theatre",AO126)),(ISBLANK(A126))),"No Venue Ref - Theatre",IF(AND(ISNUMBER(SEARCH("Event",AO126)),ISBLANK(A126)),"No Venue Ref - Event", IF(ISNUMBER(SEARCH("Event",AO126)),VLOOKUP(A126,Confirmed,40,FALSE),FALSE))))))),"Didn't Rebook")

Эта формула проверяет ячейки, предшествующие ей, в той же строке, чтобы проверить, смогла ли последняя выполненная проверка идентифицировать атрибут заказа.

The current checking method. В качестве краткой справки о проверке мне нужно сделать

  • Автомат c Отмена -> Проверяет, является ли текст ячейки "AUTO"
  • Восстановленное бронирование -> Проверяет, превышает ли значение ячейки значение 1 И ячейку в той же строке
  • Nag ios Бронирование -> Проверяет, равно ли значение ячейки в столбце B (та же строка) 0
  • Zero Ticket Booking -> Проверяет, является ли значение ячейки в столбце U (в той же строке) 0

Последняя проверка, которая еще не была настроена, является моей самой сложной задачей. Я хочу проверить дату подтверждения заказа и дату его отмены (что возможно). Возможно, что нет отмененной даты или есть только отмененная дата.

Поскольку существует вероятность того, что не будет подтвержденного / отмененного бронирования с той же ссылкой на место проведения (УНИКАЛЬНЫЙ ID), я пытался сделать это, но не смог.

=IF(OR(IFERROR(VLOOKUP(A2,Confirmed,33,FALSE)=0,0),IFERROR(VLOOKUP(A2,Cancelled,33,FALSE)=0,0)),1,2)

Или это

=IF(AND(VLOOKUP(A4,Confirmed,33,FALSE)>0,(VLOOKUP(A4,Cancelled,33,FALSE)> 0)),VLOOKUP(A4,Confirmed,33,FALSE)>VLOOKUP(A4,Cancelled,33,FALSE), IF(AND(VLOOKUP(A4,Confirmed,33,FALSE)<1,(VLOOKUP(A4,Cancelled,33,FALSE)> 0)),"NOT CONF/ YES CANC", IF(AND(VLOOKUP(A4,Confirmed,33,FALSE)>0,(VLOOKUP(A4,Cancelled,33,FALSE)>1)),"YES CONF/NO CANC",2)))

Дайте мне знать, какие детали требуются для лучшего понимания моего ответа. Например, последняя формула имеет vlookup, а column_index (33) - это дата.

Редактировать: Мои списки теперь состоят из: My Name Manager The sheets in my workbook.

  • Подтвержденный - это список подтвержденных заказов на отдельном листе.
  • Отмененный - это список отмененных заказов на отдельном листе.
  • Театр - это список театра / событий на отдельном листе, чтобы оценить, является ли бронирование для события или театра.
  • Список статусов создается заново в ответ на ответ Вариата.

1 Ответ

1 голос
/ 20 января 2020

Ваша формула непроницаема. Во-первых, мы не знаем, где находится ваш именованный диапазон «Подтвержденный», для другого SEARCH("Event",AO126) вернет число, независимо от того, содержит ли AO126 «Нет значения - Событие» или просто «Событие», но не в конце концов, ваша формула возвращает полезный результат, только если он выдает ошибку и, наконец, оценивает результаты, а не пьет прямо из груди матери.

С учетом сказанного я бы создал именованный диапазон, предпочтительно на отдельном листе в списки и скрытые от глаз (и помехи) значения «Zero Ticket booking», «Refund Booking», «Automati c Cancellation» и «Nag ios Booking». Я буду называть этот диапазон именем Статусы здесь. Используйте этот диапазон для подачи выпадающих списков проверки, из которых можно выбрать содержимое ячейки в AP: AS или ссылаться на него в формулах, например =IF(B126=0, Index(Statuses,4),"". Непосредственный эффект от введения этого диапазона будет состоять в том, чтобы позволить вам заменить все функции ПОИСКА в вашей формуле на тесты на равенство, например IF(AS126=INDEX(Statuses,1),True,False)

Далее ваша формула оценивает только два условия, то есть если AS126 пусто или нет. Пожалуйста, внесите эту логику c в базу вашей формулы: =IF(AS126="","Do one thing","Do the other"). Это избавит вас от всех ваших AND условий.

Если AS126 не пуст, эта формула должна работать. INDEX(Statuses,(MATCH(AS126,Statuses,0))). MATCH просто находит номер строки в Состояниях , где совпадает строка.

Что делать, если AS126 пусто, является секретом, который вы не раскрыли, как объяснялось выше. Попытайтесь решить проблему тем же способом, как бы то ни было. Присвойте возможные значения именованному диапазону, используйте этот диапазон для заполнения ячеек на рабочем листе, а затем используйте результат MATCH, чтобы вернуть значение из другого диапазона (вместо того же, что я делал выше).

Предположим, у вас есть "Бронирование нулевого билета" в AO126. Поэтому MATCH(AO126,Statuses,0) вернет 1. Предположим, у вас есть именованный диапазон «Выход» с «A, B, C, D». INDEX(Output, 1) поэтому вернул бы "A". Поэтому INDEX(Output, MATCH(AO126,Statuses,0)) также вернул бы "A". Вы можете использовать это, чтобы упростить вашу формулу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...