Как автоматически вставить пустую строку после группы данных

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

_

ТЕКУЩАЯ ТАБЛИЦА:

column1   |   column2   |  column3
----------------------------------
  A       |     small   |  blue
  A       |     small   |  orange
  A       |     small   |  yellow
  B       |     med     |  yellow
  B       |     med     |  blue
  C       |     large   |  green
  D       |     large   |  green
  D       |     small   |  pink

_

ЖЕЛАТЕЛЬНЫЙ СТОЛ

Примечание: пустая строка после каждого отдельного столбца1

column1   |   column2   |  column3
----------------------------------
  A       |     small   |  blue
  A       |     small   |  orange
  A       |     small   |  yellow

  B       |     med     |  yellow
  B       |     med     |  blue

  C       |     large   |  green

  D       |     large   |  green
  D       |     small   |  pink

person Ben    schedule 14.03.2013    source источник
comment
Почему? если вам когда-нибудь понадобится снова поработать с этой таблицей, это будет больно. Если это просто для чтения, почему бы не использовать условное форматирование?   -  person scott    schedule 14.03.2013
comment
Это справедливый вопрос. Я хочу иметь возможность перемещаться между группами, редактируя их, используя CTRL + стрелку вверх / вниз. И не составит никакого труда вернуть таблицу в исходный формат без каких-либо строк.   -  person Ben    schedule 14.03.2013
comment
Бен, я дал вам ответ VBA, чтобы сделать это за один шаг   -  person Our Man in Bananas    schedule 15.03.2013
comment
Вы пробовали автофильтр и \ или сводную таблицу?   -  person EEM    schedule 01.05.2016


Ответы (7)


Это делает именно то, что вы просите, проверяет строки и вставляет пустую пустую строку при каждом изменении в столбце A:

sub AddBlankRows()
'
dim iRow as integer, iCol as integer
dim oRng as range

set oRng=range("a1")

irow=oRng.row
icol=oRng.column

do 
'
if cells(irow+1, iCol)<>cells(irow,iCol) then
    cells(irow+1,iCol).entirerow.insert shift:=xldown
    irow=irow+2
else
    irow=irow+1
end if
'
loop while not cells (irow,iCol).text=""
'
end sub

Надеюсь, это поможет вам начать, дайте нам знать!

Филип

person Our Man in Bananas    schedule 14.03.2013
comment
Я также могу дать вам один без петли, если хотите :) - person Our Man in Bananas; 15.03.2013
comment
Это фантастическое решение, но когда я меняю a1 на b1 или d1, оно по какой-то причине терпит неудачу! - person user3844877; 16.01.2015
comment
@ user3844877: это потому, что cells(irow+1, 1) = столбец 1, поэтому для b1 вам нужно использовать cells(irow+1, 2) или, альтернативно, что-то вроде cells(irow+1, iCol) и установить iCol с iCol=activecell.column - person Our Man in Bananas; 16.01.2015
comment
@ user3844877 Я отредактировал код, попробуйте сейчас, просто измените ячейку на oRng - person Our Man in Bananas; 16.01.2015
comment
Большое спасибо, клетки (irow + 1, 2) за b1 проснулись отлично! - person user3844877; 16.01.2015
comment
@ user3844877 вам лучше взглянуть на новую версию кода, так как это лучший способ сделать это без использования SELECT или Activate - person Our Man in Bananas; 16.01.2015

Выберите свой массив, включая метки столбцов, ДАННЫЕ> Структура - Промежуточный итог, При каждом изменении в: столбец1, Использовать функцию: Подсчет, Добавить промежуточный итог в: столбец3, установите флажок Заменить текущие промежуточные итоги и Сводку под данными, ОК.

Отфильтруйте и выберите «Столбец1», «Текстовые фильтры», «Содержит ...», «Счетчик», «ОК». Выделите все видимое, кроме меток, и удалите содержимое. Снимите фильтр и, при желании, разгруппируйте строки.

person pnuts    schedule 20.10.2015

Это не сработает, если данные не являются последовательными (1 2 3 4, но 5 7 3 1 5), поскольку в этом случае вы не можете их отсортировать.

Вот как я решаю эту проблему:

Столбец Исходные данные, которые должны содержать 5 строк между каждым числом - 5 4 6 8 9.

Столбец B - 1 2 3 4 5 (последнее число представляет количество пустых строк, которые должны быть между числами в столбце A) скопируйте и вставьте 1-5 в столбец B, если у вас есть числа в столбце A.

Перейдите к столбцу D в столбце D1 введите 1. В столбце D2 введите эту формулу - =IF(B2=1,1+D1,D1) Перетащите ее на ту же длину, что и столбец B.

Вернуться к столбцу C - в ячейке C1 введите эту формулу - =IF(B1=1,INDIRECT("a"&(D1)),""). Перетащите его вниз, и все готово. Теперь в столбце C у нас есть та же последовательность чисел, что и в столбце A, распределенная отдельно по 4 строкам.

person Arunas    schedule 01.05.2016

Догадаться.

Шаг 1

Поместите новый столбец слева от column1 и скопируйте + вставьте следующую формулу

=B2=B3

=B3=B4

=B4=B5

... вплоть до самого низа (предположим, что столбец B - это столбец 1 в исходном вопросе).

Эта формула определяет, является ли следующая строка новым значением в столбце 1. В зависимости от результата у вас будет ИСТИНА или ЛОЖЬ. Скопируйте и вставьте эти результаты как значения, а затем замените «ЛОЖЬ» на ноль и «ИСТИНА» на 0,5.

Шаг 2

Затем добавьте этот столбец, заполненный только 0,5, к столбцу 1, что даст следующую таблицу:

  newcolumn0  |   column1 ("B") |   column2   |  column3
-----------------------------------------------------
              |     1           |     small   |  blue
              |     1           |     small   |  orange
      1.5     |     1           |     small   |  yellow
              |     2           |     med     |  yellow
      2.5     |     2           |     med     |  blue
      3.5     |     3           |     large   |  green
              |     4           |     large   |  green
      4.5     |     4           |     small   |  pink

Шаг 3

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

    newcolumn0   |  column1 ("B")  |   column2       |  column3
---------------------------------------------------------------
                 |     1           |     small   |  blue
                 |     1           |     small   |  orange
        1.5      |     1.5         |             |
                 |     1           |     small   |  yellow
                 |     2           |     med     |  yellow
                 |     2           |     med     |  blue
        2.5      |     2.5         |             |
                 |     3           |     large   |  green
        3.5      |     3.5         |             |
                 |     4           |     large   |  green
                 |     4           |     small   |  pink
        4.5      |     4.5         |             |

Альтернативные решения (все еще без VBA)

  1. Поместите значение 1 в столбец 1, строку 2 (предположим, что это A2)
  2. Поместите эту формулу в A3 =IF(B3=B2,A2,A2+1) и скопируйте + вставьте эту формулу в оставшуюся часть столбца 2.
  3. Затем скопируйте и вставьте все значения из столбца 1 в новый временный лист Excel, удалите дубликаты, затем добавьте 0,5 ко всем числам, затем вставьте эти значения под значениями в исходной электронной таблице под данными в столбце 1, вставьте все данные в столбец как значения, а затем отсортируйте по этому столбцу, удалите временный лист Excel
person Ben    schedule 14.03.2013
comment
копировать / вставить почти никогда не должно быть выбранным ответом. выберите Филиппа. - person Joshua Stafford; 24.07.2014

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

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

person Megan    schedule 16.01.2017

  1. Вставьте столбец слева от таблицы Control.
  2. Пронумеруйте данные от 1 до 1000 (при условии, что имеется 1000 строк).
  3. Скопируйте ключевое поле на другой лист и удалите дубликаты
  4. Скопируйте уникальные элементы строки на основной лист после 1000-й записи
  5. В столбце Control добавьте ко всем уникальным записям число 1001.
  6. Отсортируйте данные (включая добавленные записи) сначала по ключевому полю, а затем по контрольному полю.
  7. Добавляется пустая строка (с данными в ключевом поле и 'Control').
person Kartik Kumar    schedule 29.03.2017

У меня есть большой файл в формате Excel, посвященный покупке и продаже паев паевых инвестиционных фондов. Количество строк на листе превышает 4000. У меня нет опыта работы с VBA, и я хотел бы работать с базовым Excel. Воспользовавшись предложенными выше решениями, я попытался решить проблему (автоматически вставлять пустые строки) следующим образом:

  1. Я отсортировал свой файл по полям управления
  2. Я добавил столбец в файл
  3. Я использовал функцию «ЕСЛИ», чтобы определить, когда есть изменение в управляющих данных.
  4. Если есть изменение, в результате будет указано «да», в противном случае - «нет».
  5. Затем я отфильтровал данные, чтобы сгруппировать все элементы «да».
  6. Я скопировал названия паевых инвестиционных фондов, номер фолио и т. Д. (Нет финансовых данных)
  7. Затем я удалил фильтр и снова отсортировал файл. В результате в желаемом месте добавлена ​​строка. (Это не совсем пустая строка, потому что, если она полностью пуста, сортировка не поместит строку в желаемое место.)
  8. После сортировки вы можете легко удалить все значения, чтобы получить совершенно пустую строку.

Читатели могут попробовать и этот метод.

person Panicker    schedule 12.11.2015