Как объединить несколько строк в столбец

Вот моя ситуация. Мне нужно взять список учетных записей клиентов из 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

Это превратит это:

в это:

Этот код необходимо настроить в соответствии с вашим конкретным форматом. Также обратите внимание, что это было сделано быстро в качестве доказательства концепции и может отсутствовать некоторые распространенные передовые практики. Пожалуйста, сделайте резервную копию ваших данных, прежде чем пытаться этот код, потому что он содержит команду удаления, чтобы избавиться от повторяющихся строк.

  1. Выберите пустую ячейку для размещения объединенного содержимого, введите формулу =CONCATENATE(TRANSPOSE(B2:B19)) в строке формул, затем необходимо выбрать часть формулы TRANSPOSE (B2: B19), а затем нажмите клавишу F9. Вы можете видеть, что формула была изменена, как показано на скриншотах ниже.

  1. Удалите фигурные скобки из формулы в строке формул, а затем нажмите клавишу Enter.
Другие вопросы по тегам