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

1694
Bschacht

Вот моя ситуация. Мне нужно взять список учетных записей клиентов из 38 тыс. И отсортировать информацию по определенному шаблону, который я могу импортировать на наш новый веб-сайт. Однако способ представления данных делает это трудным ...

Каждый адрес, сохраненный для 1 клиента, является отдельной строкой. Так что если у вас есть другой адрес для выставления счета или адрес доставки, это будет 2 строки. Иногда 3 ряда. Мне нужно переместить эти строки в столбец (адрес 1, адрес 2 и т. Д.) Под 1 строкой. Поэтому, если у CustomerA есть 3 сохраненных адреса, мне нужно взять эти 3 строки и переместить их в 3 столбца 1 строки. Я надеюсь, что в этом есть смысл.

Я понятия не имею, будет ли лучшим вариантом выбрать формулу, сводную таблицу или VBA (я знаю столько же, сколько у Джона Сноу в этой области). Я пробовал сводные таблицы, но на самом деле не получается. Я думал, что Index / Match может быть лучшим решением - мне просто нужно продублировать формулу для каждого столбца Address, но это сделает работу. Однако я не знаю, как я могу вместить несколько строк.

Ниже приведен пример данных, которые я получил. Строка 20 - это шаблон, в который мне нужно переместить строки. Столбец g_user id уникален для каждого клиента, но с несколькими строками адресов для одного клиента это значение будет дублировано в электронной таблице. То же самое с customer_no.

http://www.filedropper.com/excelhelp

Или просмотрите это изображение

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация, и я постараюсь объяснить дальше.

РЕДАКТИРОВАТЬ - Из таблицы, которую я разместил, мне нужно взять строки 2 и 3 и переместить информацию об адресе в новые столбцы в строке 1. Таким образом, поскольку адрес равен 2 столбцам, город равен 1, штат 1, почтовый индекс 1 и страна 1, это составляет 12 столбцов данных из этих 2 строк.

0
Я хотел бы объединить выбранные строки в столбцы. Bschacht 6 лет назад 0
Просто к сведению, не так много людей скачают и откроют файл из интернета. Было бы лучше, если бы вы поместили данные в Исходное сообщение, используя [править]. Scott Craner 6 лет назад 0
Это целый стол. Я не знаю, как добавить все это ... Bschacht 6 лет назад 0
@ScottCraner И не совсем понятно, как загрузить файл после нажатия на предоставленную ссылку. Другие службы обмена файлами (например, OneDrive; DropBox) предоставляют ссылку, которая ведет вас непосредственно к файлу. Ron Rosenfeld 6 лет назад 0
Вы пытались вставить свой скриншот в лист Excel? Это не просто. И ссылка на ваш файл выводит меня на страницу рекламы для File Dropper. Я предлагаю вам использовать [Markdown Table Generator] (http://www.tablesgenerator.com/markdown_tables), чтобы создать образец таблицы из ваших данных. После того, как вы вставите результаты в исходное сообщение, выделите всю таблицу, а затем значок `Code Sample`, чтобы он правильно отображался. Ron Rosenfeld 6 лет назад 0
@RonRosenfeld В центре экрана есть большая кнопка с надписью «Загрузить этот файл», но я добавил скриншот для просмотра. В следующий раз я попробую генератор Markdown Table. Bschacht 6 лет назад 0
Я бы определенно использовал VBA для этого. Для одноразового использования решение @ Porcupine911 должно работать, как только вы его настроите. Если это повторяющаяся задача, где скорость может быть проблемой, существуют другие методы, которые могут значительно ускорить процесс. Ron Rosenfeld 6 лет назад 0
Это разовое использование. Я согласен с вами, VBA будет работать лучше всего ... Я просто не знаю, как его использовать. Bschacht 6 лет назад 0

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

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

  1. Удалите фигурные скобки из формулы в строке формул, а затем нажмите клавишу Enter.
@Ramhound: Вы организатор этого сообщества? 6 лет назад 0
И похоже, @CharlieRB - твой помощник. 6 лет назад 0
Это не совсем то, что я ищу. Я понимаю концепцию, но я не могу использовать этот метод для 38k строк ... Bschacht 6 лет назад 0
0
Porcupine911

Мне нравится использовать 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 

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

в это:

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

Хорошо, похоже, это решит мою проблему, но давайте просто скажем, что я абсолютно ничего не знаю о VBA? С чего мне начать? Я постараюсь выяснить это ... спасибо Bschacht 6 лет назад 0
0
Bschacht

Спасибо всем за помощь и предложения. Но я решил это другим способом.

Я просто конкатенировал «-1», «- 2», «- 3» на «уникальные» идентификаторы клиентов. Затем я сделал VLOOKUP для уникальных значений -1, -2, -3 для каждого нового столбца, который мне нужно было добавить.

Будем надеяться, что все это время и работа стоили того, чтобы завоевать репутацию этого испытания.

Возможно, это уже не лучшее решение, но это решение, которое я использовал для достижения поставленной цели. Bschacht 6 лет назад 0
0
noodle

Очень простое решение, если я правильно понял ваш запрос. Убедитесь, что сначала сделали резервную копию таблицы.

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

Я хотел бы, чтобы вы опубликовали это раньше! Похоже, это могло бы сработать для меня с меньшим количеством работы. Bschacht 6 лет назад 0

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