Я хочу создать график частоты, в котором будет указано, когда каждое действие должно выполняться в течение года, на основе каденции раскрывающегося списка (ежедневно, ежемесячно, ежеквартально, раз в полгода) и даты начала. Поэтому, если это ежедневно, оно должно повторяться каждый день после даты начала. Если ежемесячно, то каждый месяц после даты начала и так далее.
На прикрепленном изображении показано, каким будет желаемый результат.
введите сюда описание изображения
Я могу достаточно легко вычислить ежедневные данные, используя функцию повтора и разделения, но мне трудно понять, как пропустить, скажем, 30/31 ячеек для ежемесячных и больше для ежеквартальных и полугодовых, основываясь на динамической каденции и Дата начала.
Доступ к образцу листа https://docs.google.com/spreadsheets/d/1-luCbmldWuGBEJJBYtHnBlFs60Ol5h7OIdNHdZKs3wM/edit?usp=sharing
Было бы полезно, если бы вы предоставили образец листа с реалистичными демонстрационными данными и ожидаемыми результатами (введенными вручную), чтобы мы могли получить четкое представление и разработать решение. Вы также можете использовать анонимный генератор пустых листов , предоставленный форумом сообщества документации на тот случай, если вы не хотите делиться листом из своей учетной записи Google.
Я добавил образец листа с желаемыми результатами.
Вот один из подходов, который вы можете опробовать:
=let(Σ,index(match(,0/(A:A<>""))),map(A5:index(A:A,Σ),B5:index(B:B,Σ),lambda(a,b,if (or(a = "",b = ""),,map(C3:3,lambda(c,let(Λ,max(C3:3),
if (a = "Daily",if (vlookup(c,sequence(Λ-b+1,1,b),1,),C1),
if (ifna(vlookup(c,sort(edate(b,sequence(datedif (b,Λ,"m")+1,1,0,switch(a,"Monthly",1,"Quarterly",3,"Semi-Annually",6)))),1,)),C1,)))))))))
@ravenspoint Я согласен, что код rockinfreakshow можно было бы красиво напечатать, чтобы он был удобнее для глаз, но не вижу ничего плохого в логике. Языки формул электронных таблиц представляют собой функциональное программирование, которое отличается от императивных и объектно-ориентированных моделей. См. Лямбда-исчисление.
=INDEX(BYROW(A5:INDEX(A:A, MAX(ROW(A:A)*(A:A<>""))),
LAMBDA(a, LET(b, OFFSET(a,,1), d, C3:3, IF(((a = "Daily")*(b<=d))+
ISNUMBER(MATCH(d, EDATE(b, SEQUENCE(1, DATEDIF(MIN(d), MAX(d), "M"),,
SWITCH(a, "Monthly", 1, "Quarterly", 3, "Semi-Annually", 6))), )), C1, )))))
заполните даты от даты x
до последнего столбца:
=SEQUENCE(1, COLUMNS(C3:3), "2024-01-01")
заполните даты от даты x
до даты y
:
=SEQUENCE(1, ABS("2024-01-01"-"2024-12-31")+1, "2024-01-01")
заполнить названия дней:
=INDEX(IF(C3:3 = "",,TEXT(C3:3, "ddd")))
Вам нужно найти функцию, которая возвращает дату, учитывая дату начала и количество дней от даты начала. Понятия не имею, что это будет в «google-sheets», но в C++ это находится в std::chrono. Рекомендую: перестаньте возиться в облаке и напишите приложение на своем любимом языке программирования.