Excel поиск даты по условию


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

Точное совпадение

Сначала вкратце напомним работу ВПР() — VLOOKUP() с аргументом

интервальный_просмотр

= ЛОЖЬ (когда ищется значение в ключевом столбце точно соответствующее критерию).

Задача: Для заданного пользователем Товара найти в таблице соответствующую цену и количество (см. файл примера ).

Решение очевидно ( =ВПР(B10;B13:C15;2;0) ) и подробно рассмотрено

в статье про ВПР()

.

Предположим, что исходная таблица усложнилась — добавился столбец с номерами заказов.

Теперь необходимо искать заданный Товар не по всему столбцу Товар, а лишь в строках, относящегося к заданному пользователем Заказу.

Найдем количество и цену для товара Мандарины в Заказе 2.

В ячейках

А21

и

В21

введем номер Заказа и наименование товара.

В ячейке

С21

введем

формулу массива

:

=ЕСЛИ(МАКС(ЕСЛИ((Таб1[Заказ]=A21)*(Таб1[Товар]=B21);Таб1[Количество];»»));МАКС(ЕСЛИ((Таб1[Заказ]=A21)*(Таб1[Товар]=B21);Таб1[Количество];»»));»В заказе нет искомого Товара»)

Аналогичную формулу можно использовать для поиска цены.

Ближайшее ЧИСЛО (ДАТА)

В предыдущей задаче предполагалось, что наименование Товара присутствует в Заказе в единственном экземпляре и точно соответствует критерию поиска. Однако, существует класс задач, когда это не так. Особенно часто встречаются задачи поиска ближайшего ЧИСЛА (если точное значение в ключевом столбце не найдено, то выводится ближайшее).


Примечание

. Формулы, созданные для поиска ближайших ЧИСЕЛ, работают и для ДАТ, т.к. даты в MS EXCEL

хранятся в числовом формате

.

Сначала вкратце напомним работу ВПР() — VLOOKUP() с аргументом

интервальный_просмотр

= ИСТИНА (когда ищется значение в ключевом столбце точно или приблизительно совпадающее с критерием).

Задача: Для указанной пользователем Даты найти соответствующую ей цену (см. файл примера ).

Решение — формула =ВПР(B10;Табл2.1;2) , где

Табл2.1

таблица в формате MS EXCEL 2007

.

Напомним, что для ВПР() с аргументом

интервальный_просмотр

= ИСТИНА требуется сортированный по возрастанию ключевой столбец (Дата). При отсутствии в столбце точного совпадения выводится наибольшее значение, которое меньше искомого. При наличии нескольких одинаковых подходящих значений в ключевом столбце, учитывается, то что ниже. Поэтому Цена выведена 220р., а не 240 и не 230.

Теперь необходимо для заданной пользователем Даты найти соответствующую ей цену, но эта Цена и дата должны относится к заданному пользователем Продавцу.

Другими словами, найдем цену на дату, ближайшей к заданной, но только для определенно продавца.

В ячейках

А25

и

В25

введем Продавца и дату.

Прежде чем писать формулу, определимся, что значит «ближайший». На самом деле можно дать несколько определений, нужный вариант выбирается исходя из условий решаемой задачи.

Вот несколько возможных определений:

1. В терминах функции ВПР() «ближайший» — это наибольшее значение, которое меньше искомого. При наличии нескольких одинаковых подходящих значений в ключевом столбце, учитывается, то что расположено ниже в таблице. Понятно, что такое значение может быть не обязательно ближайшим.

2. Другой вариант: наименьшее значение, которое больше искомого. При наличии нескольких одинаковых значений в ключевом столбце, учитывается, то что выше.

3. Ближайшее, т.е. та дата, которая ближе, чем все остальные (м.б. раньше или позже заданной). Если таких дат несколько, то учитывается нижняя и выводится соответствующая ей цена.

Еще несколько вариантов предложено в файле примера .

Понятно, что для каждого определения ближайшего требуется своя

формулы массива

(все их можно найти в файле примера ).

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

Ближайшее время

Поскольку как и дата, так и время в EXCEL хранятся в числовом формате (см. здесь

https://excel2.ru/articles/kak-excel-hranit-datu-i-vremya

), то формулы будут работать и для дат с указанием времени, например 03.12.2018 15:06.

В файле примера есть лист для демонстрации работы функции ВПР() для столбца данных со временем (требуется сортировка по возрастанию).

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

Skip to content

3 примера, как функция ЕСЛИ работает с датами.

На первый взгляд может показаться, что функцию ЕСЛИ для работы с датами можно применять так же, как для числовых и текстовых значений, которые мы только что обсудили. К сожалению, это не так.

Примеры работы функции ЕСЛИ с датами.

Дата в качестве условия, с которым работает функция ЕСЛИ, может быть записана в какую-то ячейку Excel, либо же прямо вставлена в формулу. Вот тут-то и возникают некоторые особенности и сложности работы функции ЕСЛИ с датами.

Пример 1. Формула условия для дат с
функцией ДАТАЗНАЧ (DATEVALUE)

Иногда случается, что записать дату непосредственно в функцию ЕСЛИ, не ссылаясь ни на какую ячейку. В этом случае возникают некоторые сложности.

В отличие от многих
других функций Excel, ЕСЛИ не может распознавать даты и интерпретирует их как текст,
как простые текстовые строки.

Поэтому вы не можете выразить свое логическое условие просто как  >«15.07.2019» или же >15.07.2019. Увы, ни один из приведенных вариантов не верен.

Чтобы функция ЕСЛИ распознала дату в вашем логическом условии именно как дату, вы должны обернуть ее в функцию ДАТАЗНАЧ (в английском варианте – DATEVALUE).

Например, ДАТАЗНАЧ(«15.07.2019»).

Полная формула ЕСЛИ может
иметь следующую форму:

=ЕСЛИ(B2<ДАТАЗНАЧ(«10.09.2019″),»Поступил»,»Ожидается»)

Как показано на скриншоте,
эта формула ЕСЛИ оценивает даты в столбце В и возвращает «Послупил», если дата
поступления до 10 сентября. В противном случае формула возвращает «Ожидается».

Пример 2. Формула условия для дат с
функцией СЕГОДНЯ()

В случае, когда даты записаны в ячейки таблицы Excel, применять ДАТАЗНАЧ нет необходимости.

Если вы основываете свое условие на текущей дате, то можете взять функцию СЕГОДНЯ (в английском варианте — TODAY) в качестве аргумента функции ЕСЛИ.

К примеру, сегодня — 9 сентября 2019 года.

В столбце C отметим товар, который уже поступил. В ячейке C2 запишем:

=ЕСЛИ(B2<СЕГОДНЯ(),»Поступил»,»»)

В столбце D отметим товар, который еще не поступил. В ячейке D2 запишем:

=ЕСЛИ(B2<СЕГОДНЯ(),»»,»Ожидается»)

Пример 3. Расширенные
формулы ЕСЛИ для будущих и прошлых дат

Предположим, вы хотите
отметить только те даты, которые отстоят от текущей более чем на 30 дней.

Выделим даты, отстоящие более чем на месяц от текущей, в прошлом. Укажем для них «Более месяца назад». Запишем это условие:

=ЕСЛИ(СЕГОДНЯ()-B2>30,»Более
месяца назад»,»»)

Если условие не выполнено, то в ячейку запишем пустую строку «».

А для будущих дат, также отстоящих более чем на месяц, укажем «Ожидается».

=ЕСЛИ(B2-СЕГОДНЯ()>30,»Ожидается»,»»)

Если все результаты попробовать объединить в одном столбце, то придется составить выражение с несколькими вложенными функциями ЕСЛИ:

=ЕСЛИ(СЕГОДНЯ()-B2>30,»Более месяца назад», ЕСЛИ(B2-СЕГОДНЯ()>30,»Ожидается»,»»))

ЕСЛИ с датами

Примеры работы функции ЕСЛИ:

В этой статье объясняется, как использовать запросы на набор значений и итоги для поиска самых последних или самых ранних дат в наборе записей. Это поможет вам ответить на различные деловые вопросы, например о том, когда клиент в последний раз разместил заказ или какие пять кварталов были лучшими для продаж по городам.

В этой статье

  • Общие сведения

  • Подготовка примера данных к примеру

  • Поиск самой последней даты

  • Поиск наиболее или наименее последних дат для групп записей

Общие сведения

С помощью запроса на набор значений можно ранжировали данные и проверяли элементы с наивысшим рангом. Запрос на поиск значений — это запрос на выборку, который возвращает указанное число или процент значений из верхней части результатов, например пять самых популярных страниц на веб-сайте. Запрос на использование значений можно использовать для любого типа значений— они не должны быть числами.

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

При использовании запроса на поиск записей, содержащих самые последние или самые ранние даты, в таблице или группе записей можно ответить на различные деловые вопросы, например следующие:

  • Кто в последнее время делает самые популярные продажи?

  • Когда клиент делал заказ в последний раз?

  • Когда в команде будут следующие три дня рождения?

Чтобы создать запрос на выборки, начните с создания запроса на выборки. Затем отсортировать данные в зависимости от того, ищете ли вы верхнюю или нижнюю часть. Если вам нужно сгруппировать или обобщить данные, превратите запрос на выборку в итоговом запросе. Затем можно воспользоваться агрегатной функцией, например Max или Min, чтобы получить максимальное или наименьшее значение, или First илиLast для возвращения самой ранней или последней даты.

В этой статье предполагается, что значения дат, которые вы используете, имеют тип данных «Дата/время». Если значения даты находятся в текстовом поле,

Использование фильтра вместо запроса на использование верхних значений

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

  • Если вы хотите вернуть все записи, в которых дата совпадает, предстояла или позже определенной даты, используйте фильтр. Например, для просмотра дат продаж между апрелем и июлем нужно применить фильтр.

  • Если вы хотите вернуть указанное количество записей, которые имеют самые последние или последние даты в поле, но точные значения дат не известны или не имеют значения, вы можете создать запрос на значения. Например, чтобы увидеть пять лучших кварталов продаж, используйте запрос на значения.

Дополнительные сведения о создании и использовании фильтров см. в статье «Применение фильтра для просмотра отдельных записей в базе данных Access».

К началу страницы

Подготовка примера данных к примеру

В действиях, следующих в этой статье, используются данные из следующих примеров таблиц.

Таблица «Сотрудники»   

Фамилия

Имя

Адрес

Город

CountryOrR
egion

Дата
рождения

Дата
найма

Авдеев

Григорий

Загородное шоссе, д. 150

Москва

РФ

05-фев-1968

10-июн-1994

Кузнецов

Артем

ул. Гарибальди, д. 170

Пермь

РФ

22-май-1957

22-ноя-1996

Дегтярев

Дмитрий

ул. Кедрова, д. 54

Красноярск

РФ

11-ноя-1960

11-мар-2000

Зуева

Ольга

ул. Губкина, д. 233

Тверь

РФ

22-мар-1964

22-июн-1998

Белых

Николай

пл. Хо Ши Мина, д. 15, кв. 5

Москва

РФ

05-июн-1972

05-янв-2002

Комарова

Лина

ул. Ляпунова, д. 70, кв. 16

Красноярск

РФ

23-янв-1970

23-апр-1999

Зайцев

Сергей

ул. Строителей, д. 150, кв. 78

Омск

РФ

14-апр-1964

14-окт-2004

Ермолаева

Анна

ул. Вавилова, д. 151, кв. 8

Иркутск

РФ

29-окт-1959

29-мар-1997

Таблица EventType    

КодТипа

Тип
события

1

Презентация товара

2

Корпоративное мероприятие

3

Частное мероприятие

4

Мероприятие по сбору средств

5

Выставка-продажа

6

Лекция

7

Концерт

8

Выставка

9

Уличная ярмарка

Таблица «Клиенты»    

КодКлиента

Компания

Контакт

1

Contoso, Ltd. НИИ

Николай Белых

2

Лесопитомник

Регина Покровская

3

Fabrikam

Елена Матвеева

4

Лесопитомник

Афанасий Быков

5

А. Datum

Лилия Медведева

6

Adventure Works

Максим Измайлов

7

железа

Арина Иванова

8

Художественная школа

Полина Кольцова

Таблица «Мероприятия»    

КодМероприятия

Тип
события

Клиент

Дата
события

Цена

1

Презентация товара

Contoso, Ltd.

4/14/2011

10 000 ₽

2

Корпоративное мероприятие

Лесопитомник

4/21/2011

8000 ₽

3

Выставка-продажа

Лесопитомник

01.05.2011

25000 ₽

4

Выставка

НИИ железа

5/13/2011

4 500 ₽

5

Выставка-продажа

Contoso, Ltd.

5/14/2011

55 000 ₽

6

Концерт

Художественная школа

5/23/2011

12 000 ₽

7

Презентация товара

А. Datum

6/1/2011

15 000 ₽

8

Презентация товара

Лесопитомник

6/18/2011

21 000 ₽

9

Мероприятие по сбору средств

Adventure Works

6/22/2011

1300 ₽

10

Лекция

НИИ железа

6/25/2011

2450 ₽

11

Лекция

Contoso, Ltd.

04.07.2011

3800 ₽

12

Уличная ярмарка

НИИ железа

04.07.2011

5500 ₽

Примечание: Действия, описываемые в данном разделе, предполагают, что таблицы «Клиенты» и «Типы мероприятий» находятся на стороне «один» отношения «один-ко-многим» с таблицей «Мероприятия». В данном случае таблица «Мероприятия» имеет с этими таблицами общие поля «КодКлиента» и «КодТипа». Итоговые запросы, описанные в следующих разделах, не будут работать, если эти связи отсутствуют.

В этом примере данные в листах Excel

  1. Запустите Excel. Откроется пустая книга.

  2. Нажмите shift+F11, чтобы вставить в таблицу таблицу (потребуется четыре).

  3. Скопируйте данные из каждого примера таблицы на пустой таблицу. Включить заголовки столбцов (первую строку).

Создание таблиц базы данных на основе листов

  1. Выберем данные с первого таблицы, включая заголовки столбцов.

  2. Щелкните правой кнопкой мыши в области навигации и выберите «Вировать».

  3. Нажмите кнопку «Да», чтобы подтвердить, что первая строка содержит заголовки столбцов.

  4. Повторите действия 1–3 для каждого из оставшихся на каждом из них.

Поиск самой последней даты

В этом разделе показано, как создать запрос на набор значений.

Создание простого запроса на набор значений

  1. На вкладке Создание в группе Запросы нажмите кнопку Конструктор запросов.

  2. Дважды щелкните таблицу «Сотрудники» и нажмите кнопку «Закрыть».

    Если используется пример данных, добавьте в запрос таблицу «Сотрудники».

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

    Если вы работаете с примером таблицы, то добавьте поля «Фамилия», «Имя» и «Дата рождения».

  4. В поле, которое содержит искомые наибольшие или наименьшие значения (при использовании примера таблицы — поле «Дата рождения), в строке Сортировка выберите порядок сортировки По возрастанию или По убыванию.

    При сортировке по убыванию будут возвращены самые последние даты, при сортировке по возрастанию — самые давние.

    Важно: В строке Сортировка следует установить значение только для полей, содержащих даты. Если порядок сортировки задан по другому полю, запрос не вернет ожидаемых результатов.

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

  6. Чтобы выполнить запрос и отобразить результаты в режиме таблицы, нажмите кнопку Выполнить Изображение кнопки.

  7. Сохраните запрос в качестве NextBirthDays.

Как вы видите, этот тип запросов на набор значений дает ответы на основные вопросы, например «Кто из сотрудников самый старший или самый молодой?». Ниже описано, как с помощью выражений и других условий создавать более точные и гибкие запросы. Запрос по описанным ниже условиям выдает ближайшие дни рождения у трех сотрудников.

Добавление условий в запрос

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

Совет:  Если вы хотите лучше понять, как работает этот запрос, переключаться между конструктором и представлением таблицы на каждом этапе. Если вы хотите увидеть фактический код запроса, переключение в SQL просмотра. Для переключения между представлениями щелкните правой кнопкой мыши вкладку в верхней части запроса и выберите нужное представление.

  1. В области навигации щелкните правой кнопкой мыши запрос NextBirthDays и выберите «Конструктор».

  2. В конструкторе запросов в столбце справа от Столбец «ДатаРождения» введите следующую дату:
    MonthPart(«m»;[ДатаРождения]).
    Это выражение извлекает месяц из BirthDate с помощью функции DatePart.

  3. В следующем столбце конструктора запросов введите следующую
    информацию: DayOfMonthPart(«d»;[ДатаРождения])Это выражение извлекает день месяца из столбца BirthDate с помощью функции
    DatePart.

  4. В строке «Показать» откажитесь от флажков для каждого из двух только что в введеныных выражений.

  5. Щелкните строку «Сортировка» для каждого выражения и выберите «По возрастанию».

  6. В строке «Условия» столбца «Дата рождения» введите следующее выражение:
    Month([Дата рождения]) > Month(Date()) OR Month([Дата рождения])= Month(Date()) AND Day([Дата рождения])>Day(Date())Это выражение делает
    следующее:

    • Month(
      [Дата рождения]) > Month(Date()) указывает, что дата рождения каждого сотрудника приходится на будущий месяц.

    • Month( [Дата рождения])= Month(Date()) And Day([Дата рождения])>Day(Date()) указывает, что если дата рождения приходится на текущий месяц, день рождения приходится на текущий день или после текущего дня.

      Коротко говоря, это выражение исключает все записи, в которых дни рождения возникают между 1 января и текущей датой.

  7. На вкладке «Конструктор» в группе «Настройка запроса» введите «3» в поле «Возврат».

  8. На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить Изображение кнопки.

Примечание:  Иногда в вашем запросе с использованием собственных данных может быть больше записей, чем указано. Если данные содержат несколько записей, которые содержат значение, которое является одним из самых верхних значений, запрос возвратит все такие записи, даже если это означает возврат большего числа записей, чем нужно.

К началу страницы

Поиск наиболее или наименее последних дат для групп записей

С помощью итогного запроса можно найти самые ранние или последние даты для записей, которые попадают в группы, например событий, сгруппных по городу. Итоговой запрос — это запрос на выборки, в который для вычисления значений каждого выходного поля используются агрегатные функции (например, «Группировка», «M»и «Максимум», «Количество», «Первое» и «Последнее»).

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

Совет:  Построение запросов — очень эффективная стратегия для ответа на более сложные вопросы. Если у вас возникли проблемы с выполнением сложного запроса, подумайте, можно ли разбить его на по несложные запросы.

Создание итогового запроса

В этой процедуре для ответа на этот вопрос используются примеры таблиц Events и EventType.

Когда событие было последним в каждом из типов событий, кроме концертов?

  1. На вкладке Создание в группе Запросы нажмите кнопку Конструктор запросов.

  2. Дважды щелкните таблицы Events и EventType.
    Каждая таблица отображается в верхней части конструктора запросов.

  3. Дважды щелкните поле EventType таблицы EventType и поле EventDate из таблицы Events, чтобы добавить поля в таблицу конструктора запросов.

  4. В сетке конструктора запросов в строке «Условия» поля EventType введите<>«Концерт».

  5. На вкладке Конструктор в группе Показать или скрыть нажмите кнопку Итоги.

  6. В сетке конструктора запросов щелкните строку «Итог» в поле «EventDate» и выберите «Максимум».

  7. На вкладке Конструктор в группе Результаты выберите команду Режим, а затем — пункт SQL.

  8. В окне SQL, в конце предложения SELECT, сразу после ключевого слова AS, замените MaxOfEventDate на MostRecent.

  9. Сохраните запрос mostRecentEventByType.

Создание второго запроса для отображения более подробных данных

В этой процедуре для ответа на этот вопрос используется запрос MostRecentEventByType из предыдущей процедуры:

Кто был клиентом на последних событиях каждого типа события?

  1. На вкладке Создание в группе Запросы нажмите кнопку Конструктор запросов.

  2. На вкладке «Запросы» дважды щелкните запрос MostRecentEventByType.

  3. На вкладке «Таблицы» дважды щелкните таблицы «Мероприятия» и «Клиенты».

  4. В конструкторе запросов дважды щелкните следующие поля:

    1. В таблице Events дважды щелкните EventType.

    2. В запросе MostRecentEventByType дважды щелкните mostRecent.

    3. В таблице «Клиенты» дважды щелкните «Компания».

  5. В сетке конструктора запросов в строке «Сортировка» столбца EventType выберите «По возрастанию».

  6. На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.

К началу страницы

Поиск ближайшей даты при условии дополнительного критерия

ShagiDasha

Дата: Вторник, 28.11.2017, 22:56 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 18


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Добрый вечер дорогие форумчане! Слезно прошу о помощи. Ибо собственных знаний не хватило для выполнения нижеописанной задачи.
Пробовала и

Код

=ИНДЕКС(A7:A51;ПОИСКПОЗ(МАКС(ЕСЛИ(A7:A51<=D1;A7:A51;»»));$A$7:$A$51;0);1)

и

Код

=ИНДЕКС(A7:A51;ПОИСКПОЗ(МИН(ЕСЛИ(A7:A51>=D1;A7:A51;»»));$A$7:$A$51;0);1)

и

Код

=ЕСЛИ(A7:A51<>»»;ЕСЛИ(B7:B51=»»;D9;D10);»»)

. Но это все не помогает сделать привязку к отметке «да» (ниже будет понятно к чему это).
Есть такая задача:
В первом столбце имеется список дат (который постепенно может дополняться (вниз)). Каждая из этих дат обозначает крайний период подачи справки в налоговую. Во втором столбце напротив даты ставится пометка «да» если справка подана и пусто, если справка еще не подана. Также имеется дата «сегодня», которая прописана формулой СЕГОДНЯ().

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

К сообщению приложен файл:

_3.xls
(24.0 Kb)

Сообщение отредактировал ShagiDashaСреда, 29.11.2017, 09:32

 

Ответить

buchlotnik

Дата: Вторник, 28.11.2017, 23:00 |
Сообщение № 2

Группа: Заблокированные

Ранг: Участник клуба

Сообщений: 3442


Репутация:

929

±

Замечаний:
20% ±


2010, 2013, 2016 RUS / ENG

ShagiDasha, оформите формулы тегами (кнопка fx)

 

Ответить

sboy

Дата: Среда, 29.11.2017, 09:46 |
Сообщение № 3

Группа: Друзья

Ранг: Участник клуба

Сообщений: 2566


Репутация:

724

±

Замечаний:
0% ±


Excel 2010

Добрый день.
Если правильно понял
1 вариант

Код

=ИНДЕКС(A5:A7;ПОИСКПОЗ(«да»;B5:B7;)+1)

2 вариант

Код

=ПРОСМОТР(«я»;B5:B8;A6:A9)

К сообщению приложен файл:

0025087.xlsx
(10.0 Kb)


Яндекс: 410016850021169

 

Ответить

_Boroda_

Дата: Среда, 29.11.2017, 10:02 |
Сообщение № 4

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

На случай, если даты не отсортированы
Формула массива. Вводится одновременным нажатием Ctrl+Shift+Enter

Код

=МАКС((B5:B7=»да»)*A5:A7)

Обычная формула

Код

=МАКС(ИНДЕКС((B5:B7=»да»)*A5:A7;))

В обоих случаях формат ячейки
ДД.ММ.ГГГГ;;

К сообщению приложен файл:

_3-1-1.xlsx
(12.3 Kb)


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

ShagiDasha

Дата: Среда, 29.11.2017, 10:22 |
Сообщение № 5

Группа: Пользователи

Ранг: Новичок

Сообщений: 18


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

sboy,
Добрый день. Спасибо за ответ.
Но первый вариант у меня не работает. Когда ставишь да в ячейку В6 дата остается по-прежнему 19/12/2017, хотя она должна поменяться на 28/01/2018.
А второй вариант работает, но есть один момент, у вас в формуле выбраны диапазоны фиксированные и по столбцу B и по столбцу A. А даты то будут добавляться, и отметки тоже. Получается что если добавлять даты в нижние строки, то уже не работает(
Может быть мне нужно изначально в формуле выбирать более широкий диапазон по нумерации строк вниз?

Сообщение отредактировал ShagiDashaСреда, 29.11.2017, 10:37

 

Ответить

ShagiDasha

Дата: Среда, 29.11.2017, 10:26 |
Сообщение № 6

Группа: Пользователи

Ранг: Новичок

Сообщений: 18


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

_Boroda_, спасибо за ответ.
Но друзья, получается что формулы работают только в случае примера с тремя датами. А в условии задачи предполагается, что даты будут добавляться, и получается если добавить дату на 8 и 9ю строки (а будут добавляться и дальше), то формула перестает работать(

 

Ответить

ShagiDasha

Дата: Среда, 29.11.2017, 10:27 |
Сообщение № 7

Группа: Пользователи

Ранг: Новичок

Сообщений: 18


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Либо мне изначально нужно выбирать просто больший диапазон вниз по обоим столбцам?

 

Ответить

sboy

Дата: Среда, 29.11.2017, 10:29 |
Сообщение № 8

Группа: Друзья

Ранг: Участник клуба

Сообщений: 2566


Репутация:

724

±

Замечаний:
0% ±


Excel 2010

ответила в личные сообщения

это нарушение правил форума)

по вопросу: либо больший диапазон, либо приложите пример с реальной структурой данных


Яндекс: 410016850021169

 

Ответить

_Boroda_

Дата: Среда, 29.11.2017, 10:35 |
Сообщение № 9

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

ответила в личные сообщения

Зачем? Решать вопросы нужно здесь. Прочитайте Правила форама

А в условии задачи предполагается

Решения были написаны согласно Вашего примера.
И похоже мы неверно поняли задачу. Вам нужно видеть дату из тех заявок, которые еще не поданы? Причем не просто ближайшую, а ближайшую, но большую сегодняшней? Или любую ближайшую? Но тогда возникает вопрос — если сегодня (29.11.2017) в таблице не поданы заявки от 25.11.17 и от 01.11.17, то ближайшая дата 25.11.17. А что делать с 01.11.17?


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

ShagiDasha

Дата: Среда, 29.11.2017, 10:59 |
Сообщение № 10

Группа: Пользователи

Ранг: Новичок

Сообщений: 18


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

_Boroda_, На практике ситуации, когда сегодня 29/11/17 а справка не подана ни до 1/11/17 ни до 25/1/17 не будет, поэтому такой вариант не рассматриваем. Он теоретически может быть, но практически не будет.

Вам нужно видеть дату из тех заявок, которые еще не поданы?

Да, нужно видеть дату, по которой справка еще не подана. И эта дата должна быть следующей от последней даты, по которой была подана справка.
Так понятно? Т.е. в нашем примере, 20.11.2017 подана справка, а по следующим двум другим 19.12.2017 и 28.01.2018 не подана, так вот нужно выводить именно дату 19.12.2017, а не 28.01.2018, потому что эта дата наступит раньше, и соответственно риск не подать справку возникает раньше.
Надеюсь что объяснила.

 

Ответить

ShagiDasha

Дата: Среда, 29.11.2017, 11:02 |
Сообщение № 11

Группа: Пользователи

Ранг: Новичок

Сообщений: 18


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

sboy,

по вопросу: либо больший диапазон, либо приложите пример с реальной структурой данных

в описании задачи я и написала:

В первом столбце имеется список дат (который постепенно может дополняться (вниз))

 

Ответить

Che79

Дата: Среда, 29.11.2017, 11:13 |
Сообщение № 12

Группа: Друзья

Ранг: Старожил

Сообщений: 1649


Репутация:

306

±

Замечаний:
0% ±


2013 Win, 365 Mac

ShagiDasha, здравствуйте. Может, так нужно? Формула массива

Код

{=МИН(ЕСЛИ((B5:B7<>»да»)*(A5:A7>=СЕГОДНЯ());A5:A7))}

И посмотрите в файле Лист_2. Там более общий случай. Даты генерятся случайным образом. Поиграйтесь через F9. Нужная дата в ячейке С4 + покраска через УФ.

К сообщению приложен файл:

614285.xlsx
(11.6 Kb)


Делай нормально и будет нормально!

 

Ответить

_Boroda_

Дата: Среда, 29.11.2017, 11:14 |
Сообщение № 13

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

Тогда Вам почти подходит формула Сергея

=ПРОСМОТР(«я»;B5:B8;A6:A9)

Почти потому, что там нужно еще шапку захватить — на случай, если «да» вообще в таблице пока нет

Код

=ПРОСМОТР(«я»;B4:B998;A5:A999)

К сообщению приложен файл:

_3-1-2.xlsx
(12.3 Kb)


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

ShagiDasha

Дата: Среда, 29.11.2017, 12:04 |
Сообщение № 14

Группа: Пользователи

Ранг: Новичок

Сообщений: 18


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

_Boroda_,
Вот здесь я еще раз перепроверила, не сработала ни первая ни вторая формула.
Отметки да стоят на 20.11.2017 и 19.08.2017 датах, а формула показывает 20.11.2017 дату. А должна 28.01.2018
А вот

Код

=ПРОСМОТР(«я»;B4:B998;A5:A999)

работает. И с шапкой и с бесконечным кол-вом строк хорошо все продумано. Спасибо большое

 

Ответить

ShagiDasha

Дата: Среда, 29.11.2017, 12:09 |
Сообщение № 15

Группа: Пользователи

Ранг: Новичок

Сообщений: 18


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Che79, Спасибо за ответ. Со случайным генератором дат я не совсем разобралась…Оно работает, но на практике применить пока не понимаю как. А вот на первом листе формула

Код

=МИН(ЕСЛИ((B5:B9<>»да»)*(A5:A9>=СЕГОДНЯ());A5:A9))

тоже работает, только я буду добавлять диапазон, т.к. даты будут добавляться. Спасибо за решение

 

Ответить

Che79

Дата: Среда, 29.11.2017, 12:17 |
Сообщение № 16

Группа: Друзья

Ранг: Старожил

Сообщений: 1649


Репутация:

306

±

Замечаний:
0% ±


2013 Win, 365 Mac

тогда, по аналогии с формулами от коллег выше, сделайте его с запасом

Код

=МИН(ЕСЛИ((B5:B1000<>»да»)*(A5:A1000>=СЕГОДНЯ());A5:A1000))

Про генератор случайных дат — это просто пример на большом количестве строк, когда даты не отсортированы и пометка «да» может стоять на любой дате, большей, чем, например завтрашняя + учитывается случай, когда на всех датах стоит пометка «да», тогда нужная дата просто не находится.


Делай нормально и будет нормально!

 

Ответить

ShagiDasha

Дата: Среда, 29.11.2017, 14:00 |
Сообщение № 17

Группа: Пользователи

Ранг: Новичок

Сообщений: 18


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

ShagiDasha, Я извиняюсь…может глупо прозвучит вопрос, вот попробовала разобраться с сутью формулы просмотр, и не поняла….не поняла почему первый аргумент стоит «я»….это же искомое значение…а я не понимаю….мы ищем пустое значение? почему «я»….

 

Ответить

sboy

Дата: Среда, 29.11.2017, 14:08 |
Сообщение № 18

Группа: Друзья

Ранг: Участник клуба

Сообщений: 2566


Репутация:

724

±

Замечаний:
0% ±


Excel 2010

ShagiDasha, Тут хорошо описано


Яндекс: 410016850021169

 

Ответить

ShagiDasha

Дата: Среда, 29.11.2017, 14:16 |
Сообщение № 19

Группа: Пользователи

Ранг: Новичок

Сообщений: 18


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

sboy, Спасибо))

 

Ответить

ShagiDasha

Дата: Четверг, 30.11.2017, 10:32 |
Сообщение № 20

Группа: Пользователи

Ранг: Новичок

Сообщений: 18


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

sboy, Посмотрела разбор формулы ПРОСМОТР. И вопросов стало еще больше(
Общий случай который там разбирается (с числами и текстом) вообще не понятен. Откуда берется выражение 1/(A:A<>»»). Почему не берется просто 1….
Кто может объяснить…? В ютубе тоже не нашла. Или нужно создать новую тему?

 

Ответить

Содержание

  1. Поиск ДАТЫ (ЧИСЛА) ближайшей к заданной, с условием в EXCEL. Аналог ВПР()
  2. Точное совпадение
  3. Ближайшее ЧИСЛО (ДАТА)
  4. Ближайшее время
  5. Поиск в EXCEL ДАТЫ ближайшей к заданной
  6. Поиск записей с самыми последними или самыми давними датами
  7. Выберите нужное действие
  8. Сведения о работе запросов на набор значений с датами
  9. Правила создания и использования запросов на набор значений
  10. Выбор между запросом на набор значений и фильтром
  11. Поиск самой последней или самой давней даты
  12. Создание простого запроса на набор значений
  13. Добавление условий в запрос
  14. Если отображается больше записей, чем требовалось
  15. Если отображается меньше записей, чем требовалось
  16. Если выводятся повторяющиеся записи
  17. Поиск самых последних или самых давних дат для записей в категории или группе

Поиск ДАТЫ (ЧИСЛА) ближайшей к заданной, с условием в EXCEL. Аналог ВПР()

history 14 мая 2015 г.

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

Точное совпадение

Сначала вкратце напомним работу ВПР() — VLOOKUP() с аргументом интервальный_просмотр = ЛОЖЬ (когда ищется значение в ключевом столбце точно соответствующее критерию).

Задача: Для заданного пользователем Товара найти в таблице соответствующую цену и количество (см. файл примера ).

Решение очевидно ( =ВПР(B10;B13:C15;2;0) ) и подробно рассмотрено в статье про ВПР() .

Предположим, что исходная таблица усложнилась — добавился столбец с номерами заказов.

Теперь необходимо искать заданный Товар не по всему столбцу Товар, а лишь в строках, относящегося к заданному пользователем Заказу.

Найдем количество и цену для товара Мандарины в Заказе 2.

В ячейках А21 и В21 введем номер Заказа и наименование товара.

В ячейке С21 введем формулу массива :

=ЕСЛИ(МАКС(ЕСЛИ((Таб1[Заказ]=A21)*(Таб1[Товар]=B21);Таб1[Количество];»»));МАКС(ЕСЛИ((Таб1[Заказ]=A21)*(Таб1[Товар]=B21);Таб1[Количество];»»));»В заказе нет искомого Товара»)

Аналогичную формулу можно использовать для поиска цены.

Ближайшее ЧИСЛО (ДАТА)

В предыдущей задаче предполагалось, что наименование Товара присутствует в Заказе в единственном экземпляре и точно соответствует критерию поиска. Однако, существует класс задач, когда это не так. Особенно часто встречаются задачи поиска ближайшего ЧИСЛА (если точное значение в ключевом столбце не найдено, то выводится ближайшее).

Примечание . Формулы, созданные для поиска ближайших ЧИСЕЛ, работают и для ДАТ, т.к. даты в MS EXCEL хранятся в числовом формате .

Сначала вкратце напомним работу ВПР() — VLOOKUP() с аргументом интервальный_просмотр = ИСТИНА (когда ищется значение в ключевом столбце точно или приблизительно совпадающее с критерием).

Задача: Для указанной пользователем Даты найти соответствующую ей цену (см. файл примера ).

Напомним, что для ВПР() с аргументом интервальный_просмотр = ИСТИНА требуется сортированный по возрастанию ключевой столбец (Дата). При отсутствии в столбце точного совпадения выводится наибольшее значение, которое меньше искомого. При наличии нескольких одинаковых подходящих значений в ключевом столбце, учитывается, то что ниже. Поэтому Цена выведена 220р., а не 240 и не 230.

Теперь необходимо для заданной пользователем Даты найти соответствующую ей цену, но эта Цена и дата должны относится к заданному пользователем Продавцу.

Другими словами, найдем цену на дату, ближайшей к заданной, но только для определенно продавца.

В ячейках А25 и В25 введем Продавца и дату.

Прежде чем писать формулу, определимся, что значит «ближайший». На самом деле можно дать несколько определений, нужный вариант выбирается исходя из условий решаемой задачи.

Вот несколько возможных определений:

1. В терминах функции ВПР() «ближайший» — это наибольшее значение, которое меньше искомого. При наличии нескольких одинаковых подходящих значений в ключевом столбце, учитывается, то что расположено ниже в таблице. Понятно, что такое значение может быть не обязательно ближайшим.

2. Другой вариант: наименьшее значение, которое больше искомого. При наличии нескольких одинаковых значений в ключевом столбце, учитывается, то что выше.

3. Ближайшее, т.е. та дата, которая ближе, чем все остальные (м.б. раньше или позже заданной). Если таких дат несколько, то учитывается нижняя и выводится соответствующая ей цена.

Еще несколько вариантов предложено в файле примера .

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

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

Ближайшее время

Поскольку как и дата, так и время в EXCEL хранятся в числовом формате (см. здесь https://excel2.ru/articles/kak-excel-hranit-datu-i-vremya ), то формулы будут работать и для дат с указанием времени, например 03.12.2018 15:06.

В файле примера есть лист для демонстрации работы функции ВПР() для столбца данных со временем (требуется сортировка по возрастанию).

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

Источник

Поиск в EXCEL ДАТЫ ближайшей к заданной

history 7 апреля 2013 г.

Пусть имеется диапазон с датами. Найдем дату из этого диапазона, которая является ближайшей к заданной. Решение этой задачи аналогично решению, изложенного в статье Поиск ЧИСЛА ближайшего к заданному .

Пусть в диапазоне A4:A12 имеется список дат. Будем в нем искать дату из ячейки С4 . Если диапазон не содержит искомого значения, то будет возвращено ближайшее значение.

Искомая дата необязательно должна совпадать с какой-нибудь датой или даже находиться в диапазоне поиска (см. Файл примера ):

Решение

Результат поиска

Примечание

ищется наибольшее значение, которое меньше, чем искомое значение (если искомая дата меньше, чем минимальное значение из диапазона, то будет возвращена ошибка #Н/Д)

если столбец не отсортирован по возрастанию, то результат непредсказуем

ищется ближайшая к критерию дата (если обнаружено 2 ближайших числа (одно больше, другое меньше критерия), то выводится то, которое расположено выше (номер строки меньше))

столбец м.б. не отсортирован

ищется наибольшее значение, которое меньше , чем искомое значение (если искомая дата меньше, чем минимальное значение из диапазона, то будет возвращена ошибка #Н/Д)

столбец м.б. не отсортирован

= ИНДЕКС(A4:A12; ПОИСКПОЗ(МИН(ЕСЛИ(A4:A12>=C4;A4:A12;»»)); $A$4:$A$12;0);1)

ищется наименьшее значение, которое больше , чем искомое значение (если искомая дата больше, чем максимальное значение из диапазона, то будет возвращена ошибка #Н/Д)

столбец м.б. не отсортирован

ищется ближайшая к критерию дата (если обнаружено 2 ближайших числа (одно больше, другое меньше критерия), то выводится то, которое больше

столбец м.б. не отсортирован

ищется ближайшая к критерию дата (если обнаружено 2 ближайших числа (одно больше, другое меньше критерия), то выводится то, которое меньше

столбец м.б. не отсортирован

Последние 5 решений реализованы с использованием формул массива . Для пошагового просмотра хода вычислений используйте клавишу F9 .

Как видно из таблицы, применение функции ВПР() со значением аргумента интервальный_просмотр равным ИСТИНА, имеет недостатки. Во-первых, найденное значение м.б. далеко не ближайшим (задав в качестве критерия дату 06.02.2009 получим не ближайшую дату 07.02.2009, а наибольшее значение, которое меньше, чем искомое значение, т.е. 05.01.2009). Во-вторых, если искомая дата меньше, чем минимальное значение из диапазона, то будет возвращена ошибка #Н/Д. В-третьих, требуется сортировка списка, что не всегда удобно.

Хорошим решением является формула массива =ИНДЕКС(A4:A12; ПОИСКПОЗ(МИН(ABS(A4:A12-C4));ABS(A4:A12-C4);0))

свободная от всех указанных недостатков, но имеющая свои: формула относительно сложная и является формулой массива .

Совет : т.к. дата в MS EXCEL хранится в числовом виде (см. статью Как Excel хранит дату и время ), то формулы для поиска ближайшего числа также будут работать для дат (см. раздел Ближайшее ЧИСЛО ).

Источник

Поиск записей с самыми последними или самыми давними датами

В этой статье объясняется, как использовать запросы на набор значений для поиска самых последних или самых давних дат в наборе записей. Данные, возвращаемые такими запросами, позволяют получать ответы на различные деловые вопросы, например о том, когда клиент делал заказ в последний раз.

Выберите нужное действие

Сведения о работе запросов на набор значений с датами

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

Когда сотрудник в последний раз продавал товар? Ответ поможет определить наиболее и наименее продуктивных сотрудников.

Когда клиент делал заказ в последний раз? Если в течение определенного периода заказов не было, его можно перенести в список неактивных клиентов.

У кого ближайшие дни рождения?

Правила создания и использования запросов на набор значений

Для создания запроса на набор значений следует сначала создать запрос на выборку. В зависимости от требуемых результатов вы можете установить для запроса порядок сортировки или преобразовать его в итоговый запрос. При преобразовании используются агрегатные функции, например Max или Min для возврата наибольшего или наименьшего значения и First или Last для получения самой последней или самой давней даты. Итоговые запросы и агрегатные функции используются только для поиска данных, которые попадают в набор групп или категорий. Предположим, что нужно найти объем продаж за указанную дату для каждого города, в котором работает компания. В этом случае города становятся категориями (необходимо собрать данные по городам), поэтому можно использовать итоговый запрос.

В процессе работы помните, что в запросе (независимо от его типа) должны использоваться поля, содержащие описательные данные, например имена клиентов, и поля со значениями даты, среди которых будет производиться поиск. Кроме того, значения даты должны находиться в полях с типом данных «Дата/время». Запросы, описанные в этой статье, не будут правильно работать со значениями дат в текстовых полях. Кроме того, при использовании итогового запроса поля данных должны содержать информацию о категории, например о городе или стране.

Выбор между запросом на набор значений и фильтром

Чтобы определить, стоит ли создавать запрос на набор значений или же следует применить фильтр, примите во внимание следующее:

Если вы хотите получить записи, в полях которых содержатся самые последние или самые давние даты, а точные значения дат неизвестны или не имеют значения, следует создать запрос на набор значений.

Если вы хотите получить все записи, в которых даты совпадают с определенной датой, предшествуют ей или следуют за ней, используйте фильтр. Например, для просмотра дат продаж между апрелем и июлем нужно применить фильтр. Подробное обсуждение фильтров выходит за пределы данной темы.

Дополнительные сведения о создании и использовании фильтров см. в статье «Применение фильтра для просмотра отдельных записей в базе данных Access».

Поиск самой последней или самой давней даты

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

Страна или регион

Дата приема на работу

Загородное шоссе, д. 150

ул. Гарибальди, д. 170

ул. Кедрова, д. 54

ул. Губкина, д. 233

пл. Хо Ши Мина, д. 15, кв. 5

ул. Ляпунова, д. 70, кв. 16

ул. Строителей, д. 150, кв. 78

ул. Вавилова, д. 151, кв. 8

При этом вы можете ввести образец данных в новую таблицу вручную или скопировать этот пример таблицы в программу для работы с электронными таблицами, например Microsoft Excel, а затем импортировать полученный листа в таблицу с помощью Access.

Создание простого запроса на набор значений

На вкладке Создание в группе Запросы нажмите кнопку Конструктор запросов.

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

Дважды щелкните таблицу, а затем нажмите кнопку Закрыть.

Если вы используете пример данных из предыдущего раздела, добавьте в запрос таблицу Employees.

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

Если вы работаете с примером таблицы, то добавьте поля «Фамилия», «Имя» и «Дата рождения».

В поле, которое содержит искомые наибольшие или наименьшие значения (при использовании примера таблицы — поле «Дата рождения), в строке Сортировка выберите порядок сортировки По возрастанию или По убыванию.

При сортировке по убыванию будут возвращены самые последние даты, при сортировке по возрастанию — самые давние.

Важно: В строке Сортировка следует установить значение только для полей, содержащих даты. Если порядок сортировки задан по другому полю, запрос не вернет ожидаемых результатов.

На вкладке «Конструктор» в группе «Настройка запроса» щелкните стрелку вниз рядом со списком «Все» (список «Главные значения») и введите нужное количество записей или выберите нужный вариант из списка.

Чтобы выполнить запрос и отобразить результаты в режиме таблицы, нажмите кнопку Выполнить .

Сохраните запрос и оставьте его открытым, чтобы использовать на следующих шагах.

Как вы видите, этот тип запросов на набор значений дает ответы на основные вопросы, например «Кто из сотрудников самый старший или самый молодой?». Ниже описано, как с помощью выражений и других условий создавать более точные и гибкие запросы. Запрос по описанным ниже условиям выдает ближайшие дни рождения у трех сотрудников.

Добавление условий в запрос

Примечание: В этих инструкциях предполагается, что вы используете запрос, описанный в предыдущем разделе.

Откройте запрос, созданный на предыдущих шагах, в Конструкторе.

В бланке запроса в столбце справа от столбца «Дата рождения» скопируйте и вставьте или введите следующее выражение: Expr1: DatePart(«m»; [Дата рождения]). Затем нажмите кнопку Выполнить.

Функция DatePart извлекает месяц из значения в поле «Дата рождения».

Переключитесь в Конструктор.

Справа от первого выражение вставьте или введите следующее выражение: Expr2: DatePart(«d»; [Дата рождения]). Затем нажмите кнопку Выполнить.

В этом случае функция DatePart извлекает день из значения в поле «Дата рождения».

Переключитесь в Конструктор.

Для обоих введенных выражений снимите флажки в строке Показать, щелкните строку Сортировка и выберите пункт По возрастанию.

Нажмите кнопку Запустить.

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

Для продолжения работы с примером данных откройте Конструктор. Затем в строке Условия отбора столбца Дата рождения введите следующее выражение:

Month([Дата рождения]) > Month(Date()) Or Month([Дата рождения])= Month(Date()) And Day([Дата рождения])>Day(Date())

Это выражение делает следующее: Месяц([Дата рождения]) > Month(Date()) проверяет дату рождения каждого сотрудника, чтобы узнать, приходится ли она на следующий месяц, и, если это так, включает эти записи в запрос. Месяц([Дата рождения])= Month(Date()) And Day([Дата рождения])>Day(Date()) в выражении проверяет даты рождения, которые происходят в текущем месяце, чтобы узнать, приходится ли на день рождения или после текущего дня. Если это условие истинно, функция включает эти записи в запрос. Краткое выражение игнорирует все записи, в которых день рождения приходится на период с 1 января до даты выполнения запроса.

Другие примеры выражений условий для запросов можно найти в статье Примеры условий запроса.

На вкладке «Конструктор» в группе «Настройка запроса» щелкните стрелку вниз рядом со списком «Все» (список «Главные значения») и введите нужное количество записей или выберите нужный вариант из списка.

Чтобы просмотреть следующие три дня рождения, введите 3.

Чтобы выполнить запрос и отобразить результаты в режиме таблицы, нажмите кнопку Выполнить .

Если отображается больше записей, чем требовалось

Если в данных есть записи с одинаковым значением даты, запрос может возвращать больше записей, чем вы указали. Например, вы можете создать запрос на набор значений для получения записей о трех сотрудниках, н запрос вернет четыре, поскольку у Измайлова и Быкова дни рождения совпадают, как указано в следующей таблице.

Если отображается меньше записей, чем требовалось

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

Дополнительные сведения об условиях см. в статье Примеры условий запроса.

Если выводятся повторяющиеся записи

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

Третья и четвертая записи кажутся одинаковыми, но это может объясняться тем, что Попов обработал два различных заказа, отгруженных в один день.

Чтобы избежать отображения повторяющихся записей, можно выполнить одно из двух действий в зависимости от требуемого результата. Вы можете изменить структуру запроса, добавив поля, которые позволят различить записи, например поля «КодЗаказа» и «КодКлиента». Или, если достаточно показать только одну из повторяющихся записей, вы можете выбрать отображение только уникальных записей, задав значение Да для свойства запроса Уникальные значения. Чтобы задать значение этого свойства, в Конструктор щелкните правой кнопкой мыши в любом свободном месте в верхней половине окна конструктора запросов и выберите в контекстном меню команду Свойства. В окне свойств найдите свойство Уникальные значения и задайте для него значение Да.

Дополнительные сведения о работе с повторяющимися записями см. в статье Поиск, скрытие или удаление повторяющихся данных.

Поиск самых последних или самых давних дат для записей в категории или группе

Для поиска самых последних или самых давних дат для записей, входящих в группы или категории, используются итоговые запросы. Итоговый запрос представляет собой запрос на выборку, в котором для вычисления значений определенного поля используются агрегатные функции, например Min, Max, Sum, First, и Last

В этом разделе предполагается, что вы управляете мероприятием — проводите промежуточное мероприятие, освещение, питание и другие аспекты крупных функций. Кроме того, управляемые вами события могут попадать в несколько категорий, например мероприятий по запуску продукции, уличных ярлам и концертам. В этом разделе объясняется, как ответить на распространенный вопрос: когда будет следующее событие по категориям? Другими словами, когда будет следующий выпуск продукта, следующий концерт и так далее.

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

Инструкции в данном разделе предполагают использование следующих трех таблиц:

Источник

Понравилась статья? Поделить с друзьями:
  • Excel поиск даты в ячейке excel
  • Excel поиск даты в столбце
  • Excel поиск данных на другом листе
  • Excel поиск данных в тексте
  • Excel поиск данных в одной ячейке