Повтор данных
Мне показалось, что было бы интересно посмотреть на возможные способы решения этой задачи другими пользователями 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)
Перевод:
Екатерина Бондаренко, Михаил Даньшин
https://danshin.ms
Comments
Anonymous
January 01, 2003
Задачу можно решить с помощью формул, причем довольно элегантно. Во-первых, решим проблему «повторов». Для этого проще всего "условно привязаться" к номеру строки: делим номер строки на 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. Удачи!Anonymous
January 01, 2003
Ваш способ замечательный! Изначально не требовалось сохранить порядок, но если это потребуется мы теперь знаем как это делать! :)Anonymous
January 01, 2003
Здесь не совсем понятно, что нужно клиенту. Предположим ему нужно получить группировку по всем данным - тогда да, Ваш способ идеален. А если ему необходимо сохранить порядок значений в столбцах? Вот у Вас в примере: 600, 5000, 1000. И в результате 1000..., 5000..., 600.... А сортировка ведь убила результат. Убила. Вы получили в итоге: 600,1000,5000. И если клиенту надо с сохранением порядка? Тогда клиент берет и ручками переставляет данные. Я предлагаю другой способ, не идеальный конечно, но с учетом того, что клиенту нужно сохранить порядок значений в столбце.
- Выделяем начальные ячейки А1:А3
- "Протаскиваем" их вправо на то количество ячеек, на какое нужно повторений. Например на 4.
- Выполняем копирование всего что получилось.
- Переходим на другую ячейку и выбираем "Специальная вставка..."
- Далее "Транспортировать". Получаем 3 столбца ячеек, по 4 значения в каждом. Как и хотели. Ну а теперь ручками их распологаем так, как они были ранее: 600..., 5000...., 1000.... Как Вам такой способ?