В этом примере у меня есть два столбца данных: Дата и Количество.
Пример: (См. ссылку на скриншот)
Что я хотел бы сделать, с формулой excel (если возможно), так это «выровнять загрузку» этих величин и распределить их как можно более равномерно в течение заданного периода времени, сохраняя при этом целые числа. Идеальный день каждого значения будет соответствовать четвергу данной недели.
Желаемый результат: (См. ссылку на скриншот)
Да это верно!
Вы обнаружите, что это слишком много для формулы. vba будет лучшим методом. Но я люблю, когда мне доказывают неправоту.
Любые предложения по решению приветствуются!
@ScottCraner, ответ ниже может показаться вам интересным .... Ваш комментарий все еще действителен, поскольку он был натянутым, но я не мог не воспринять ваш комментарий как интеллектуальный вызов.
Я немного новичок. Как мне это принять? Огромное спасибо! @MayukhBhattacharya
У меня есть еще одна морщинка, которую я хотел бы показать здесь. Наряду с датой и количеством у меня теперь есть столбец «элемент», который я хотел бы связать с датами, и теперь я распределяю количество. @JvdV Должен ли я создать новый пост, чтобы задать этот вопрос со ссылкой на это? Спасибо за любой отзыв!!
@HelpMeCode, новые вопросы действительно получают новые сообщения. Если на ваш текущий вопрос был дан ответ, поставьте галочку слева от ответа.
@JvdV Я бы с удовольствием, но, к сожалению, мне нужно 15 очков репутации, чтобы проголосовать или «принять» ваш ответ. Ошибка, которую я получаю при попытке принять: «Спасибо за отзыв! Чтобы проголосовать, вам нужно как минимум 15 репутации, но ваш отзыв был записан».
@helpmecode. Голосование отличается от принятия ответа. Рядом со стрелками для голосования есть галочка, на которую можно нажать
Ух ты! Я чувствую себя глупо сейчас. Я принял твой ответ!


Это возможно, но жестко. Вот мои два цента (и я, возможно, слишком много думал об этом):
Формула в E2:
=LET(A,SEQUENCE(EOMONTH(A5,0)-A3,,A3),B,FILTER(A,(WEEKDAY(A)=5)*((DAY(A)/7)-0.1<VLOOKUP(A,A3:B5,2))),C,BYROW(B,LAMBDA(x,SUM(--(MONTH(B)=MONTH(x))))),D,VLOOKUP(B,A3:B5,2),VSTACK(A2:B2,HSTACK(B,FLOOR(D/C,1)+TEXTSPLIT(CONCAT(TAKE(UNIQUE(HSTACK(MONTH(B),RIGHT("0|0|0|0|0|"&REPT("1|",MOD(D,C)),C*2))),,-1)),,"|",1))))
Или (так же подробно, но без TEXTSPLIT()):
=LET(A,SEQUENCE(EOMONTH(A5,0)-A3,,A3),B,FILTER(A,(WEEKDAY(A)=5)*((DAY(A)/7)-0.1<VLOOKUP(A,A3:B5,2))),C,BYROW(B,LAMBDA(x,SUM(--(MONTH(B)=MONTH(x))))),D,VLOOKUP(B,A3:B5,2),VSTACK(A2:B2,HSTACK(B,FLOOR(D/C,1)+MID(CONCAT(TAKE(UNIQUE(HSTACK(MONTH(B),RIGHT("00000"&REPT("1",MOD(D,C)),C))),,-1)),SEQUENCE(COUNT(B)),1))))
Как вы можете сказать, это натянуто (только доказывает точку зрения @Scott в комментарии о том, что это может быть проще с помощью VBA).
Если у вас есть ms365, но нет доступа к БЕТА-функциям, вы можете использовать:
=LET(A,SEQUENCE(EOMONTH(A5,0)-A3,,A3),B,FILTER(A,(WEEKDAY(A)=5)*((DAY(A)/7)-0.1<VLOOKUP(A,A3:B5,2))),C,BYROW(B,LAMBDA(x,SUM(--(MONTH(B)=MONTH(x))))),D,VLOOKUP(B,A3:B5,2),CHOOSE({1,2},B,FLOOR(D/C,1)+MID(CONCAT(INDEX(UNIQUE(CHOOSE({1,2},MONTH(B),RIGHT("00000"&REPT("1",MOD(D,C)),C))),,2)),SEQUENCE(COUNT(B)),1)))
Вам просто нужно добавить заголовки самостоятельно (поскольку нет VSTACK()).
Совершенно потрясающе, +1!
Вам определенно нужно было подумать об этом больше, чем потребовалось бы для udf. Но впечатляюще.
@ScottCraner абсолютно! Заняло некоторое время (и немного дольше).
Если кому интересно :) stackoverflow.com/questions/72221724/…
Я предполагаю, что если бы у вас было 6 в июле, то и 21, и 28 число было бы 2?