Как объединить два столбца Excel в один (другой способ)

14959
claws

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

Enter image description here

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

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

6

7 ответов на вопрос

8
default locale

Не очень простое в обслуживании решение на основе формулы заключается в использовании следующей формулы в 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)
Хорошо, чтобы сделать это действительно гибким, вы можете изменить его на следующее: `= INDEX (myrange, ROUNDUP ((ROW () - StartRow + 1) / NumOfCols, 0) + IF (RangeIncHeaders =" Yes ", 1,0) , MOD (ROW () - StartRow, NumOfCols) +1) ` Andi Mohr 11 лет назад 1
Если вы установите в качестве переменных диапазона имен `StartRow`,` NumOfCols` и `RangeIncHeaders`, вы можете просто скопировать и вставить эту формулу вниз. Andi Mohr 11 лет назад 1
@AndiMohr: можете ли вы привести пример этой формулы? Я попробовал это, но были некоторые ошибки. Спасибо AHC 9 лет назад 0
@AHC Я опубликую новый ответ, который объясняет, как это будет работать. Andi Mohr 9 лет назад 1
@AHC - [вот, пожалуйста] (http://superuser.com/a/893775/151054) Andi Mohr 9 лет назад 1
3
Martín Canaval

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

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 (я едва помню это), я не использовал офис много лет, но хотел внести свой вклад в любом случае.

3
Andi Mohr

Building on default locale's excellent answer, (and in response to AHC's request) you could add flexibility by defining some variables and adjusting the formula.

Let's start from default locale's result.

enter image description here

Unfortunately the formula used here will break if you have more than 2 columns, or if your output doesn't start on the same row as your range.

Let's define some variables to specify the row you want your output to start on, and the number of columns in your range.

enter image description here

The grey box shown above lists our variables. For cells G1, G2 & G3, name the range by clicking each cell in turn, then clicking into the box highlighted yellow. Type the relevant range name: StartRow, NumOfCols and RangeIncHeaders.

Now you can replace the original formula with our new one that uses variables:

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

enter image description here

Now let's insert a third column. Change the range referenced in the formula to $A$1:$C$4 to pick up the fact there are 3 columns. Set NumOfCols to 3 as well.

As an example, let's also move our output down so it starts on row 5 instead of row 1. Set StartRow to 5.

enter image description here

Finally, you might want to be able to toggle row headers on and off. If so just set RangeIncHeaders to Yes.

enter image description here

2
pnuts

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

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

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

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

SU539258 first example

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

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

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

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

SU539258 second example

Здесь алфавиты (a, b, c, d, e, f, g, h) просто используются в качестве заполнителей. В столбце D мне действительно нужны A1, B1, A2, B2, A3, B3, A4, B4. claws 11 лет назад 1
Вы много говорили, что я не могу понять. claws 11 лет назад 1
1
Sumeet Pujari

A1 = a
B1 = b

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

1
Srikanth Reddy

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

   A1 B1
------- --------
    1 a
    2 b
    3 c

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

-1
Saurav Agarwal

= unique (transpose ()) Это должно служить цели!

Как это служит цели? Что это делает лучше, чем другие решения? Обратите внимание, что почти все другие решения дают объяснения и подробно в своих ответах, вы должны стремиться делать то же самое. Mokubai 6 лет назад 2

Похожие вопросы