Дані Excel у рядках та стовпцях, які потрібно переформатувати


3

У мене дані в Excel у шахматному форматі. У самому лівому стовпці є ідентифікатор клієнта, а реквізити цього клієнта є різними рядками в різних стовпцях. Мені потрібно переставити дані в один ряд для кожного клієнта. Він є в тому ж форматі для всіх інших клієнтів.

CustomerID FirstName LastName Education Training TrainingYear City State Zip
1          John       C       Masters
1                                      SAP
1                                                2017
1                                                             LA
1                                                                   CA
1                                                                        91433
2          Max        G       Bachelors
2                                       Oracle
2                                               2015
2                                                             NR
2                                                                  CA
2                                                                        91234

@ fixer1234 Ви дійсно повинні розмістити це як відповідь!
Вилікс

Відповіді:


0

Використовуй це

=INDIRECT(CONCATENATE("A", ROW()*6-10))

Зміна "A" у відповідному стовпчику (B для прізвища, C для прізвища, D для освіти тощо) та зміні "-10" на відповідний стовпець (-10 для освіти, -9 для навчання, -8 для навчального року , ..., -5 для Zip)


Для стовпця «Навчання»

=INDIRECT(CONCATENATE("E", ROW()*6-9))

Для Zip Column

=INDIRECT(CONCATENATE("H", ROW()*6-6))


Кредити до коментаря fixer1234 .


Цей інтуїтивно зрозумілий метод НЕ працює (або, принаймні, не так зручно, оскільки AutoFill не розпізнає просту 6-шагову схему):

CustomerID | Firstname | Lastname | Education | Training | TrainingYear | City | State | Zip
----------------------------------------------------------------------------------------------
=A2        | =B2       | =C2      | =D2       | =E3      | =F4          | =G5  | =H6   | =I7
=A8        | =B8       | =C8      | =D8       | =E9      | =F10         | =G11 | =H12  | =I13

0

Мені потрібно переставити дані в один ряд для кожного клієнта. Він є в тому ж форматі для всіх інших клієнтів.

Якщо вам зручно працювати з макросами. Ось простий вкладений цикл:

Sub moveAndCleanup()
    Call move
    Call cleanup
End Sub

Sub move()
    Dim row, col, i, j As Integer
    row = 2
    col = 4
    j = 6
        Do While Cells(row, 1).Value <> ""
            For i = 1 To 5
                Cells(row, col + i).Value = Cells(row + i, col + i).Value
            Next i
            row = row + j
        Loop
End Sub

Sub cleanup()
    Dim row, col, i, j As Integer
    row = 2
    col = 4
    j = 6
        Do While Cells(row, 1).Value <> ""
            For i = 1 To 5
                Cells(row + i, col + i).Value = ""
                Cells(row + i, 1).Value = ""
            Next i
            row = row + j
        Loop
End Sub

Але не забудьте скопіювати свої дані або спершу скопіюйте свою робочу книжку, оскільки ви НЕ МОЖЕТЕ РОЗВИТИТИ макрос.


0

Це можна зробити за допомогою деяких формул, які розраховують, які клітинки використовувати на основі рядка, як це робить відповідь Аді Нугрохо. Насправді ви можете зробити це на крок далі і використовувати єдину формулу для всіх комірок.

1: Рішення єдиної формули

Ось один приклад (є кілька підходів, які можна використати). Скопіюйте заголовки стовпців на інший аркуш. Потім введіть цю формулу в A2:

=OFFSET(Sheet1!$A$2,ROW()*6-12+(COLUMN()>4)*(COLUMN()-4),COLUMN()-1)

Скопіюйте його через стовпці, після чого повторіть рядок за потребою. Це дає вам:

єдина формула

Пояснення:

Функція OFFSET прив’язує вашу нову таблицю до першої комірки вихідних даних, а потім визначає кожну клітинку як зсув звідти.

ROW()*6-12 перетворює початковий шаблон шести рядків в один інтервал рядків.

(COLUMN()>4)*(COLUMN()-4)bumps посилання на рядок для стовпців E і далі. Перші круглі дужки містять логічний тест на те, чи ви знаходитесь ви за межами 4-го стовпця, повертаючи, 1якщо це правда та 0чи неправда. Це множиться на число стовпців, що перевищує 4, щоб відобразити шаблон даних (стовпець 5 випадає на один рядок).

COLUMN()-1пристосовує фактичний стовпець до зміщення (стовпець 1 вашого результату 0зміщений від стовпця 1 даних).

Тож ця єдина формула знаходить правильну коду для кожної комірки у вашому результаті.


2: Жодних мозкових клітин не потрібно

Як альтернатива, існує дійсно просте рішення, яке не вимагає будь-яких фантазійних функцій.

Почніть зі своїх даних у Sheet1:

дані

  • Скопіюйте заголовки стовпців на новий аркуш.
  • У першому рядку введіть першу посилання комірки (в А2) на дані в Таблиці 1:

    = аркуш1! А2

Скопіюйте його на B2, C2 та D2. Потім скопіюйте його в E3, F4, G5, H6 та I7. Це автоматично направить клітинки в потрібне місце. Потім перетягніть (перемістіть) клітинки в стовпцях E-I до рядка 2 і формули будуть збережені. Отже, рядок 2 буде містити:

A2: =sheet1!A2
B2: =sheet1!B2
C2: =sheet1!C2
D2: =sheet1!D2
E2: =sheet1!E3
F2: =sheet1!F4
G2: =sheet1!G5
H2: =sheet1!H6
I2: =sheet1!I7
  • Виберіть значення рядка 2 та повторіть їх на сторінці на стільки ж рядків, скільки у вас є дані на Листі 1. Це буде виглядати приблизно так:

Крок 1

У ньому є ваші однорядні дані, але вони є в перших рядках кожної шестирядкової групи. Зауважте, що замість рядків, які є порожніми у стовпцях B до I, у цих стовпцях можуть бути рядки з нулями, якщо стовпець A був відформатований як число (це не проблема).

Залишаємо зайві рядки ще одним кроком.

  • Виберіть всю таблицю і увімкніть фільтрування.
  • Фільтр на стовпці B і виберіть, щоб відображати лише порожні клітинки (або нуль, якщо це те, що у вас є). Фільтр приховає рядки з вашими значеннями і виглядатиме так (або як рядки нулів, за винятком стовпця A); тобто лише додаткові рядки:

Фільтр

  • Виберіть усі видимі рядки даних та видаліть рядки за допомогою меню правою кнопкою миші:

видалити рядки

  • Тепер вимкніть фільтрування, і ви отримаєте результат:

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.