Распределение значений во времени

В этом примере у меня есть два столбца данных: Дата и Количество.

Пример: (См. ссылку на скриншот)

Что я хотел бы сделать, с формулой excel (если возможно), так это «выровнять загрузку» этих величин и распределить их как можно более равномерно в течение заданного периода времени, сохраняя при этом целые числа. Идеальный день каждого значения будет соответствовать четвергу данной недели.

Желаемый результат: (См. ссылку на скриншот)

Распределение значений во времени

Я предполагаю, что если бы у вас было 6 в июле, то и 21, и 28 число было бы 2?

Scott Craner 10.05.2022 20:42

Да это верно!

HelpMeCode 10.05.2022 20:44

Вы обнаружите, что это слишком много для формулы. vba будет лучшим методом. Но я люблю, когда мне доказывают неправоту.

Scott Craner 10.05.2022 20:45

Любые предложения по решению приветствуются!

HelpMeCode 10.05.2022 20:48

@ScottCraner, ответ ниже может показаться вам интересным .... Ваш комментарий все еще действителен, поскольку он был натянутым, но я не мог не воспринять ваш комментарий как интеллектуальный вызов.

JvdV 11.05.2022 13:46

Я немного новичок. Как мне это принять? Огромное спасибо! @MayukhBhattacharya

HelpMeCode 11.05.2022 23:36

У меня есть еще одна морщинка, которую я хотел бы показать здесь. Наряду с датой и количеством у меня теперь есть столбец «элемент», который я хотел бы связать с датами, и теперь я распределяю количество. @JvdV Должен ли я создать новый пост, чтобы задать этот вопрос со ссылкой на это? Спасибо за любой отзыв!!

HelpMeCode 11.05.2022 23:37

@HelpMeCode, новые вопросы действительно получают новые сообщения. Если на ваш текущий вопрос был дан ответ, поставьте галочку слева от ответа.

JvdV 12.05.2022 11:37

@JvdV Я бы с удовольствием, но, к сожалению, мне нужно 15 очков репутации, чтобы проголосовать или «принять» ваш ответ. Ошибка, которую я получаю при попытке принять: «Спасибо за отзыв! Чтобы проголосовать, вам нужно как минимум 15 репутации, но ваш отзыв был записан».

HelpMeCode 12.05.2022 22:02

@helpmecode. Голосование отличается от принятия ответа. Рядом со стрелками для голосования есть галочка, на которую можно нажать

JvdV 12.05.2022 22:08

Ух ты! Я чувствую себя глупо сейчас. Я принял твой ответ!

HelpMeCode 13.05.2022 01:47
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
11
96
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это возможно, но жестко. Вот мои два цента (и я, возможно, слишком много думал об этом):

  • Предполагая доступ к новейшим БЕТА-функциям (или альтернативу, указанную ниже);
  • Месяцы следуют друг за другом в следующем порядке, например: май > июнь > июль и т. д.

Формула в 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!

Mayukh Bhattacharya 11.05.2022 10:34

Вам определенно нужно было подумать об этом больше, чем потребовалось бы для udf. Но впечатляюще.

Scott Craner 11.05.2022 15:17

@ScottCraner абсолютно! Заняло некоторое время (и немного дольше).

JvdV 11.05.2022 15:59

Если кому интересно :) stackoverflow.com/questions/72221724/…

HelpMeCode 13.05.2022 01:50

Другие вопросы по теме