1

У меня есть следующие данные в Excel:

start date  end date    number of repetition
 0             515            423
 0             484            982
 0             456           5,012
 0             425           1,063
 0             395           2,148

Мне нужно сгенерировать, например, 423 повторения соответствующей даты начала и окончания в столбце, как это:

0
515
0
515
...

А затем остальные повторения начинаются после этого в том же столбце ..

2 ответа2

3

Мне удалось адаптировать ответ Байрона Уолла на Как создать динамическую таблицу в Excel? (при переполнении стека) для чередования двух столбцов:

  • E2=A2
  • E3=B2
  • E4=IF(
        INDEX(C$2:C$99, MATCH(E2,A$2:A$99), 1) > COUNTIF(E$2:E2, E2),
        E2,
        INDEX(A$2:A$99, MATCH(E2,A$2:A$99)+1, 1))
  • E5=IF(
        INDEX(C$2:$C99, MATCH(E2,A$2:A$99), 1) > COUNTIF(E$2:E2, E2),
        E3,
        INDEX(B$2:B$99, MATCH(E2,A$2:A$99)+1, 1))

Затем выберите E4 и E5 вместе и перетащите вниз.  Конечно, вы должны заменить 99 последним номером строки ваших исходных данных (или чем-то большим).

Для тестирования / демонстрации я

  • изменил количество повторений на что-то управляемое, поэтому мне не пришлось бы перетаскивать строку 828 (2 × 413+2), чтобы увидеть 32 (A3) в первый раз,
  • изменили даты окончания B3:B6 , поэтому было бы очевидно, что B3 , B4 , B5 и B6 отображались напротив A3 , A4 , A5 и A6 (а не B2 снова и снова),
  • только для отображения, разбейте столбец E на две части, чтобы изображение могло иметь высоту 20 строк, а не 38.

     

Это позволяет диапазонам дат перекрываться, как указано выше,

   или вот так: или чтобы не было перекрытия, вот так:

дата начала дата окончания дата начала дата окончания 0 15 1 10 10 25 11 20 20 35 21 30 30 45 31 40 40 55 41 50

Но это не позволяет значениям A появляться в предыдущих строках как значения B

    вот так: или вот так:

дата начала дата окончания дата начала дата окончания 1 8 1 15 8 15 8 22 15 22 15 29 22 29 22 36 29 36 29 43

(то есть диапазоны не должны быть смежными).  Если вам нужно обрабатывать такие данные, измените E4 и E5 на:

  • E4=IF(
        INDEX(C$2:C$99, MATCH(E2,A$2:A$99), 1) >
                  SUMPRODUCT(--(E$2:E2 = E2), --(MOD(ROW(E$2:E2),2)=0)),
        E2,
        INDEX(A$2:A$99, MATCH(E2,A$2:A$99)+1, 1))
  • E5=IF(
        INDEX(C$2:C$99, MATCH(E2,A$2:A$99), 1) >
                  SUMPRODUCT(--(E$2:E2 = E2), --(MOD(ROW(E$2:E2),2)=0)),
        E3,
        INDEX(B$2:B$99, MATCH(E2,A$2:A$99)+1, 1))

Для ясности я отформатировал даты начала, а даты окончания - желтые:

 

1

Это работает, но вы должны вручную настроить для каждой строки. Вы можете автоматически заполнить эту формулу столько раз, сколько вам нужно, она начнет возвращаться пустой, когда будет сделано достаточно повторений. Для выполнения первого ряда (1516) вы используете:

=IF(ROW()<=C$2*2+1,IF(ISEVEN(ROW()),A$2,B$2),"")

Настройка для следующего ряда выглядит так:

=IF(ROW()<=C$3*2+1,IF(ISEVEN(ROW()),A$3,B$3),"")

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .