Я работаю в небольшой больнице в Индии и столкнулся со следующей проблемой: для специального препарата у нас есть список с ДАТА, ИДЕНТИФИКАТОР, ДОЗА, ПРОДОЛЖИТЕЛЬНОСТЬ, СЛЕДУЮЩИЙ ПОСЕЩЕНИЕ, который мы используем как ежедневный рабочий список (рабочая тетрадь 1), то есть один идентификатор (лицо) может появляться в этом списке более одного раза.
В другой рабочей книге у нас есть «Главный файл» (рабочая книга 2) с каждым идентификатором только один раз, но шаблон (ДАТА, ДЛИТЕЛЬНОСТЬ, СЛЕДУЮЩИЙ ПОСЕЩЕНИЕ) повторяется каждый раз, когда человек приходит снова (то есть ДАТА2, ДЛИТЕЛЬНОСТЬ2, СЛЕДУЮЩИЙ ПОСЕЩЕНИЕ2)
Я ищу элегантный способ автоматически заполнить данные из моего ежедневного списка (рабочая книга 1) в главном листе (рабочая книга 2). Поэтому я предполагаю, что мне понадобится некоторая функция IF + INDEX/Match + Array, чтобы найти ID в рабочей книге 1, получить значения для DATE1, DURATION1, NEXT VISIT2 и заполнить рабочую книгу 2, затем пройти дальше по списку в рабочей книге 1, найти следующее время прихода пациента, получить данные и снова заполнить их в рабочей книге 2, но теперь в DATE2... и так далее.
Я добавляю две картинки, поясняющие проблему.
Ежедневный лист:
Основной лист:
решение1
- Можно найти значения с помощью формул. Вам просто понадобятся заголовки, чтобы показать числа, например 1 с форматом0 "ст визит"и т. д.
- К сожалению, функции никогда не будут иметь дело с двумя вещами: потерей данных и переполнением. Представьте, что пациент приходит 8-й раз, и он не отображается в вашей таблице, потому что вы заполнили ее только до 7.
Функция, которую вы, вероятно, ищете, это
=SUMPRODUCT(1*(A3>$A$3:$A$8),1*(B3=$B$3:$B$8))+1
который нужно добавить в рабочую книгу один и он скажет вам номер данной встречи, первая: 1, вторая: 2 и т. д. Еще одна проблема с этой формулой в том, что она не различает два числа с одинаковым значением. Если человек случайно посетит вас дважды в один день (предполагая, что вы не записываете с точностью до часов), это будет считаться только как одно.
решение2
Как описано в другом ответе, вы можете сделать это с помощью формулы, но это может быть не лучшим/простым решением, я бы использовал один из следующих вариантов:
Сводная таблица:
Вероятно, самое простое и элегантное решение, если вы можете смириться с его ограничениями:
- диапазон назначения не редактируется (возможно, в вашем случае это даже плюс).
- вы можете использовать только числовые и датовые значения в теле вашей таблицы (в вашем примере только текст - это rate, но вы можете задать пользовательский формат чисел, чтобы после числа отображалось "mg").
Подготовка:
- добавьте новый столбец в вашу таблицу - VisitSequence: =countifs(f:f,f3,b:b,"<="&b3)
.
- создайте сводную таблицу. Метки столбцов: ID; заголовки строк: VisitSequence; значения: Дата, доза, продолжительность, следующий визит (так как у вас есть только одна строка для каждой комбинации ID X дата, вы можете использовать либо сумму, либо среднее значение).
ВБА:
Требует гораздо больше работы, чем Pivot, но гораздо более гибок.
MS Access:
Собственный инструмент для нужного вам отчета. Возможно, вам придется немного поучиться, но это может быть лучшим долгосрочным решением.