Повтор данных


Мне показалось, что было бы интересно посмотреть на возможные способы решения этой задачи другими пользователями Excel. Недавно один из клиентов задал вопрос – как для ряда значений в одном столбце, вроде этого:

1000
5000
600

получить другой столбец, в котором каждое значение повторялось, скажем, 4 раза подряд:

1000
1000
1000
1000
5000
5000
5000
5000
… и так далее?

Мой ответ: единственный способ решить эту задачу исключительно автоматическими способами – написать макрос. Но если вас отяготят несколько лишних действий, предлагаю следующий способ (на примере упомянутых выше значений):

1. Выделите три начальные ячейки (например, A1:A3)
2. Выполните копирование («Копировать» или Ctrl+C)
3. Выделите 9 ячеек ниже начальных (A4:A12)
4. Нажмите «Вставить» (Ctrl+V)
5. Выполните сортировку, разделив данные на 3 разные группы (600, 1000, 5000).

Число ячеек для этапа №3 всегда будет равно: Количество начальных ячеек x Количество повторений – Количество начальных ячеек.  В данном случае 3 x 4 – 3 = 9.

Клиенту понравился этот способ. А что скажете вы? Есть ли другой (лучший) способ?

Джозеф Чирилов (Joseph Chirilov)

Перевод:
Екатерина Бондаренко, Михаил Даньшин
http://danshin.ms

Comments (3)

  1. Anonymous says:

    Задачу можно решить с помощью формул, причем довольно элегантно.

    Во-первых, решим проблему «повторов». Для этого проще всего "условно привязаться" к номеру строки: делим номер строки на 4 и округляем. Полученное значение можно считать индексом, и при необходимости подправить смещением. Итак, [ИНДЕКС] = ROUND(ROW()/4,0).

    Теперь у нас есть индекс. Осталось вытащить значение из исходного списка по индексу. Допустим, наш список находится в ячейках

    $A$2:$A$4. Тогда вынуть нужное значение можно так: =INDEX($A$2:$A$4, [ИНДЕКС],1)

    Объединяем:

    =INDEX($A$2:$A$4,ROUND(ROW()/4,0),1)

    Этой формулой нужно заполнить столбец, где мы желаем видеть конечный результат. В идеале необходимо включить проверку выхода за пределы списка, и, как я уже сказал раньше, смещение.

    Екатерина, Михаил, блог про Excel – отличное начинание! Смущает только одно: блоги вообще-то редко переводят, т.к. важен элемент общения с автором. Надеюсь, скоро подтянутся русскоговорящие эксперты по Excel.

    Удачи!

  2. mdanshin@gmail.com says:

    Ваш способ замечательный! Изначально не требовалось сохранить порядок, но если это потребуется мы теперь знаем как это делать! 🙂

  3. Anonymous says:

    Здесь не совсем понятно, что нужно клиенту. Предположим ему нужно получить группировку по всем данным – тогда да, Ваш способ идеален. А если ему необходимо сохранить порядок значений в столбцах? Вот у Вас в примере: 600, 5000, 1000. И в результате 1000…, 5000…, 600…. А сортировка ведь убила результат. Убила. Вы получили в итоге: 600,1000,5000. И если клиенту надо с сохранением порядка? Тогда клиент берет и ручками переставляет данные.

    Я предлагаю другой способ, не идеальный конечно, но с учетом того, что клиенту нужно сохранить порядок значений в столбце.

    1. Выделяем начальные ячейки А1:А3

    2. "Протаскиваем" их вправо на то количество ячеек, на какое нужно повторений. Например на 4.

    3. Выполняем копирование всего что получилось.

    4. Переходим на другую ячейку и выбираем "Специальная вставка…"

    5. Далее "Транспортировать".

    Получаем 3 столбца ячеек, по 4 значения в каждом. Как и хотели. Ну а теперь ручками их распологаем так, как они были ранее: 600…, 5000…., 1000….

    Как Вам такой способ?