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

4 ответа4

0

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

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

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

0

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

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

в это:

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

0

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

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

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

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

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