6

У меня есть список, как показано в столбцах A и B , и я хочу объединить, как показано в D:

Введите описание изображения здесь

Как я могу это сделать?

Здесь алфавиты (a, b, c, d, e, f, g, h) просто используются в качестве заполнителей. Что мне действительно нужно в column D это A1, B1, A2, B2, A3, B3, A4, B4.

7 ответов7

8

Не очень простое в обслуживании решение на основе формулы заключается в использовании следующей формулы в D:

=INDEX($A$1:$B$5,QUOTIENT(ROW()+1,2),IF(MOD(ROW(),2)=0,2,1))

Позвольте мне добавить форматирование и объяснить его по частям:

=INDEX(
   $A$1:$B$5,
   QUOTIENT(ROW()+1,2),
   IF(MOD(ROW(),2)=0,2,1)
   )

Итак, INDEX вернет ячейку в диапазоне по координатам. Аргументы:

  1. $A$1:$B$5 - диапазон, содержащий два столбца.
  2. QUOTIENT(ROW()+1,2) - целочисленное деление номера текущей строки на 2. Это дает номер строки в диапазоне от (1).
  3. IF(MOD(ROW(),2)=0,2,1) - остаток от целочисленного деления от (2). Это дает номер столбца в диапазоне от (1).

Решение не очень гибкое, и для его поддержки необходимы небольшие улучшения:

  • Более двух столбцов
  • Не соседние столбцы
  • Результат в определенном диапазоне (например, начиная с D5)
3

Основываясь на отличном ответе локали по умолчанию (и в ответ на запрос AHC), вы можете добавить гибкость, задав некоторые переменные и скорректировав формулу.

Давайте начнем с результата локали по умолчанию.

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

Давайте определим некоторые переменные, чтобы указать строку, с которой вы хотите начать вывод, и количество столбцов в вашем диапазоне.

В сером поле, показанном выше, перечислены наши переменные. Для ячеек G1, G2 и G3 назовите диапазон, щелкнув каждую ячейку по очереди, затем щелкнув в поле, выделенном желтым цветом. Введите имя соответствующего диапазона: StartRow , NumOfCols и RangeIncHeaders .

Теперь вы можете заменить исходную формулу нашей новой, использующей переменные:

=INDEX( $A$1:$B$4, ROUNDUP((ROW()-StartRow+1)/NumOfCols,0)+IF(RangeIncHeaders="Yes",1,0), MOD(ROW()-StartRow,NumOfCols)+1 )

Теперь давайте вставим третий столбец. Измените диапазон, указанный в формуле, на $A$1:$C$4 чтобы определить факт наличия 3 столбцов. Установите NumOfCols на 3, а также.

В качестве примера, давайте также переместим наш вывод вниз, чтобы он начинался со строки 5 вместо строки 1. Установите StartRow на 5.

Наконец, вы можете захотеть включать и выключать заголовки строк. Если это так, просто установите RangeIncHeaders на Yes .

3

Если вы не возражаете против использования макроса, вот идея.

Sub MergeColumnsAlternating()
  Dim total, i, rowNum as Integer
  total = 4 '' whatever number of rows you need to merge.
  i = 1
  For rowNum = 1 to total
    Range("D" & i) = Range("A" & rowNum)
    i = i + 1
    Range("D" & i) = Range("B" & rowNum)
    i = i + 1
  Next rowNum
End Sub

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

2

Промежуточный итог для каждого изменения в ColumnA, Filter и выбор промежуточных итоговых строк (например, путем поиска Count) очищают эти ячейки, удаляют фильтр, перемещают ColumnB вниз на одну строку и затем объединяют два столбца.

Более подробно:

Требование чередования было бы легче выполнить, если бы каждая альтернативная строка была пустой. Подытог уже имеет возможность добавлять строки и может быть использован для этого. В этом вопросе создается впечатление, что каждая ячейка отличается, поэтому при каждом изменении счетчик должен создавать промежуточный итог для каждой записи. [Если данные имеют смежное повторение, можно использовать столбец «помощник» (скажем, здесь ColumnD, поскольку столбец помощника требуется только временно). Произнесите клавишу 1 в D1 и перетащите ручку заливки до нужного значения - строка 4 - с нажатой клавишей Ctrl .]

Подытоги для каждого изменения (если возможно, ColumnA, в противном случае ColumnD) вставляют промежуточные итоги, например:

SU539258 первый пример

С помощью фильтрации строки, содержащие промежуточные итоги, могут быть выбраны (например, текстовые фильтры, содержит, клавиша "Подсчет", ОК) и пропущены (строки обязательны, но не их содержимое). Метки столбцов могут быть удалены одновременно, если не требуется.

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

Исходные данные по-прежнему не повреждены (хотя теперь разнесены), и записи ColumnD могут быть «перемещены» из ColumnsA и B путем объединения, например, с помощью формулы, как на правом изображении (при необходимости копируются). Если исходные данные были текстовыми или значениями, формулы в ColumnD можно заменить на Копировать / Вставить специальные / Значения.

Вполне возможно, что есть лучшие способы достижения результата, но об этом трудно сказать, не зная, что находится в столбцах A и B (например, формулы [с или без реляционных ссылок?], Текст или значения?).

SU539258 второй пример

1

A1 = a
B1 = b

Что я понимаю, так это то, что в D1 вам нужен вывод как "ab", то есть A1, B1. И тогда вам нужно иметь формулу как =A1&B1 .

1

Предполагая, что у вас есть столбцы, как показано ниже в Excel,

   A1 B1
------- --------
    1 а
    2 б
    3 с

Затем примените формулу в столбце C1:=INDEX($A:$B,CEILING(ROWS(C$1:C1)/2,1),2-MOD(ROWS(C$1:C1),2)) . Вы получите нужный результат в c1.

-1

= unique(transpose({transpose(unique(A:A))), transpose(B:B))})) Это должно служить цели!

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