Создайте связанный тип данных CurrencyPair: просто впишите в ячейку для наглядности и грусти по былым временам "доллар по 20" значение USD/RUB куда-нибудь в A1, R1L1, R1C1 или в табличном гиперпространстве Лобачевского, мне плевать, короче, в первой ячейке для простоты;
2. Создайте в Диспетчере имен функцию CurrencyAtDate, в тело вставьте это дерьмо:
=LAMBDA(StartDate;Currency;
LET(
EndDate; КОНМЕСЯЦА(StartDate; 0);
Dates; ПОСЛЕД(EndDate-StartDate+1;1;StartDate;1);
Values; ИСТОРИЯАКЦИЙ(Currency; Dates; Dates; 0; 0; 1);
ValidValues; ФИЛЬТР(Values; НЕ(ЕОШИБКА(Values)));
FirstValidValue; ИНДЕКС(ValidValues; 1; 1);
FirstValidValue
)
)
3. Создайте в любой другой ячейке функцию:
=LET(
StartDate; ДАТА(2022;1;1);
MonthsPassed; РАЗНДАТ(StartDate; СЕГОДНЯ(); "M");
Dates; ДАТАМЕС(StartDate; ПОСЛЕД(MonthsPassed+1;1;0;1));
Currency; A1;
RowValues;BYROW(Dates;LAMBDA(date; ЕСЛИОШИБКА(CurrencyAtDate(date; Currency); 0)));
RowValues
)
где A1 - это ваша ячейка со значением USD/RUB, которую Ехель должен преобразовать в связанный тип данных CurrencyPair по клику на кнопку "Валюты" в секции "Типы данных" ленты "Данные".
Ну или просто wellcum to Песочница для теста с правом на редактирование. Пароль: 0000PB
Проблема в том, что CurrencyAtPair() считает иногда с ошибкой, ошибка нормально обрабатывается и подставляется 0, что и отображается в ячейке. Хотя, если тестить отдельно для каждого значения в массиве Dates в той функции LET(), то именованная функция отрабатывает нормально. Почему так? Так происходит для любой пары валют.
P. S. Объяснение для именованной лямбда-функции: она ищет первое валидное значение курса валюты для торговых дней, пропуская неторговые дни.
P. P. S. Объяснение для LET-функции: она вызывает лямбда-функцию для каждого месяца, так как лямбда сама по себе считает курс только для одного-единственного месяца. Формулы разделены для наглядности, которой нет.
До сих пор не решил проблему...
Вау! Спасибо! Отлично работает! через =MAP() не пробовал, если честно, да и не знал о нем. Сейчас восстановлю в голове контекст, зачем я вообще хотел это применить, разберу формулу по частям и применю в своём калькуляторе подписок
Mikhail Muzykin, твою репутацию увеличил Kenya-West. Репутация - 192 Респект от Excel Hacks
очень странно, MAP появился немножко раньше, чем BYROW и в данном случае его использование максимально оправдано. а по работоспособности - обратите внимание, что для ИСТОРИЯАКЦИЙ можно задавать диапазон дат - и она сама выбирает те, на которые есть данные; а вот в случае генерации котировок на все даты с последующей фильтрацией ошибок оно падает - не знаю, вылечат или нет, новые функции реально очень "капризные"
Обсуждают сегодня