Как объединить несколько строк в одну строку - PullRequest
0 голосов
/ 26 февраля 2020

Моя ситуация следующая. У меня есть список из примерно 2 тысяч учетных записей студентов, и я сортирую информацию в указанном формате c, который я могу отформатировать в нашей новой CRM. То, как данные представлены изначально, делает эту проблему проблематичной c.

. Как видно на первом снимке экрана, выбор университета каждого студента представлен в отдельной строке. Поэтому, если студент выбрал более одного университета, данные о нем хранятся в 2-6 строках (каждый студент может выбрать от 1 до 6 университетов), повторяя его personalID, имя, имя и DoB в каждой строке.

Что Мне нужно добиться, чтобы удалить повторяющуюся информацию и хранить все данные о каждом ученике в одной строке на каждого учащегося (пример на скриншоте 2).

Я понятия не имею, как этого добиться с помощью VBA. Я пытался с IF, циклами и массивами, но без какого-либо прогресса. Мне нужна помощь о том, как выполнить sh, используя VBA.

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

Снимок экрана 1

Снимок экрана 2

РЕДАКТИРОВАТЬ: Это часть отчета. Я работаю над макросом, который отформатирует его под наши нужды и даст нам больше информации о счетах студента. Вот почему я прошу помощи в VBA.

Ответы [ 2 ]

1 голос
/ 26 февраля 2020

Нет необходимости использовать VBA для этого. Power Query поможет вам лучше. Посмотрите здесь: https://excelgorilla.com/power-bi/power-query/aggregate-text-values-using-group-by/

0 голосов
/ 26 февраля 2020

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

Редактировать: Предполагается, что в списке каждого студента 5 университетов. Код можно настроить для учета любого числа, просто динамически настраивая целевой диапазон.

Редактировать 2: я добавил изменение в учетную запись для студентов, поступивших в любое количество университетов от 1 до 5. Позвольте мне знать, если это будет сделано!

Sub ReArrange_Data()

Dim lrow As Long
lrow = Cells(Rows.Count, 1).End(xlUp).Row

Dim First As Integer
Dim Last As Integer
Dim test As Integer
Dim test1 As Integer
Dim student_range As Range
Dim student_rows As Integer
Dim target_range As Range
First = 2

For i = 2 To lrow
    Last = First
    If Cells(First, "D").Value = "" Then GoTo Break    'reached end of data

    While Cells(Last, "D").Value = Cells(Last + 1, "D").Value
       Last = Last + 1
    Wend
    If Last <> First Then             'check if mulitiple uni and build range
        Set student_range = Range("E" & First & ":" & "E" & Last)
        student_rows = student_range.Rows.Count
        If student_rows = 5 Then
            Set target_range = Range("E" & First & ":" & "I" & First)
        ElseIf student_rows = 4 Then
            Set target_range = Range("E" & First & ":" & "H" & First)
        ElseIf student_rows = 3 Then
            Set target_range = Range("E" & First & ":" & "G" & First)
        ElseIf student_rows = 2 Then
            Set target_range = Range("E" & First & ":" & "F" & First)
        End If

    Else
        GoTo Skip        'student entered one uni, go to next loop
    End If


    target_range = Application.WorksheetFunction.Transpose(student_range.Value)   'row to column
    Rows(First + 1 & ":" & Last).EntireRow.Delete
Skip:                                             'delete repeated entries
    First = First + 1

Next i
Break:
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...