Как объединить несколько строк в столбец
Вот моя ситуация. Мне нужно взять список учетных записей клиентов из 38 тыс. И отсортировать информацию по определенному шаблону, который я могу импортировать на наш новый веб-сайт. Однако способ представления данных делает это трудным...
Каждый адрес, сохраненный для 1 клиента, является отдельной строкой. Так что если у вас есть другой адрес для выставления счета или адрес доставки, это будет 2 строки. Иногда 3 ряда. Мне нужно переместить эти строки в столбец (адрес 1, адрес 2 и т. Д.) Под 1 строкой. Поэтому, если у CustomerA есть 3 сохраненных адреса, мне нужно взять эти 3 строки и переместить их в 3 столбца 1 строки. Я надеюсь, что в этом есть смысл.
Я понятия не имею, будет ли лучшим вариантом выбрать формулу, сводную таблицу или VBA(я знаю столько же, сколько у Джона Сноу в этой области). Я пробовал сводные таблицы, но на самом деле не получается. Я думал, что Index/Match может быть лучшим решением - мне просто нужно продублировать формулу для каждого столбца Address, но это сделает работу. Однако я не знаю, как я могу вместить несколько строк.
Ниже приведен пример данных, которые я получил. Строка 20 - это шаблон, в который мне нужно переместить строки. Идентификатор столбца g_user уникален для каждого клиента, но с несколькими строками адресов для одного клиента это значение будет дублировано в электронной таблице. То же самое с customer_no.
http://www.filedropper.com/excelhelp
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация, и я постараюсь объяснить дальше.
РЕДАКТИРОВАТЬ - Из таблицы, которую я разместил, мне нужно взять строки 2 и 3 и переместить информацию об адресе в новые столбцы в строке 1. Таким образом, поскольку адрес - 2 столбца, город - 1, штат - 1, почтовый индекс - 1, а страна 1, это составляет 12 столбцов данных из этих 2 строк.
4 ответа
Спасибо всем за помощь и предложения. Но я решил это другим способом.
Я просто конкатенировал "-1", "- 2", "- 3" на "уникальные" идентификаторы клиентов. Затем я сделал VLOOKUP для уникальных значений -1,-2,-3 для каждого нового столбца, который мне нужно было добавить.
Будем надеяться, что все это время и работа стоили того, чтобы получить репутацию, полученную в результате этого испытания.
Очень простое решение, если я правильно понял ваш запрос. Убедитесь, что сначала сделали резервную копию таблицы.
1) Добавьте необходимое количество новых столбцов в правильном месте. Допустим, новый столбец - N.
2) Я предполагаю, что идентификатор клиента находится в столбце A, и строки с новым адресом для того же клиента имеют одинаковый номер в столбце A в этой строке. И, наконец, предполагая, что первая строка для каждого клиента содержит наиболее полную информацию, кроме адреса, т. Е. Имени телефона и т. Д. (Если нет, то используйте сортировку, сортируя сначала по номеру клиента, а затем по имени).
3) В ячейке N2 введите эту формулу:
=if(and(a3=a2,a1<>a2),h3,"")
где H - столбец с адресами. Если в следующей строке есть тот же клиент, нет. (a3=a2), И эта строка является новым клиентом, то есть номером клиента, отличным от предыдущего ряда (a1<>a2), ПОТОМ это возьмет адрес из следующей строки и поместит его в основную строку для этого клиента. Повторите эти действия для всех остальных частей этого адреса, чтобы вся информация была перемещена. Т.е. та же формула, но в O2 вместо N2 и ссылка на i3 вместо h3 и так далее.
4) Сделайте аналогичную формулу для 3-го адреса. Т.е. при условии, что столбец X является новым столбцом для 3-го адреса, в типе X2:
=if(and(a4=a2,a1<>a2),h4,"")
В основном то же самое, только взятие информации из двух строк вниз.
5) К настоящему времени все адреса должны быть в "основной" строке для каждого клиента. Теперь вам нужно скопировать все эти адреса и вставить их в те же места, используя специальные значения Paste. Это позволит избавиться от формул и просто будет содержать адреса в виде данных, как если бы вы ввели их.
6) Теперь используйте сортировку по имени клиента, чтобы получить все строки, которые имеют пустое имя (потому что это просто дополнительные адреса) в одном месте. Затем удалите все эти строки, убедившись, что все необходимые данные теперь находятся в правильной строке. Вуаля
Мне нравится использовать VBA для такой задачи. Предполагая, что у вас есть уникальный идентификатор пользователя, как показано в таблице примеров, вы можете сделать что-то вроде этого:
Sub Addresses_To_Columns()
Dim lastRow As Long
Dim addressCount As Integer: addressCount = 0
lastRow = Range("A" & Rows.Count).End(xlUp).Row
For i = lastRow To 3 Step -1
If Cells(i, 1).Value = Cells(i - 1, 1).Value Then
addressCount = addressCount + 1
Range(Cells(i - 1, 10), Cells(i - 1, (addressCount * 6) + 10)) = Range(Cells(i, 4), Cells(i, (addressCount * 6) + 4)).Value
Rows(i).Delete
Else
addressCount = 0
End If
Next i
End Sub
Это превратит это:
Этот код необходимо настроить в соответствии с вашим конкретным форматом. Также обратите внимание, что это было сделано быстро в качестве доказательства концепции и может отсутствовать некоторые распространенные передовые практики. Пожалуйста, сделайте резервную копию ваших данных, прежде чем пытаться этот код, потому что он содержит команду удаления, чтобы избавиться от повторяющихся строк.
- Выберите пустую ячейку для размещения объединенного содержимого, введите формулу =CONCATENATE(TRANSPOSE(B2:B19)) в строке формул, затем необходимо выбрать часть формулы TRANSPOSE (B2: B19), а затем нажмите клавишу F9. Вы можете видеть, что формула была изменена, как показано на скриншотах ниже.
- Удалите фигурные скобки из формулы в строке формул, а затем нажмите клавишу Enter.