Макрос Excel для форматирования ячеек на основе значений и группирования пустых строк ниже

Я пытаюсь создать макрос excel для форматирования некоторых данных, которые экспортируются из другой программы. Вот пример компоновки данных:

ID        Code      SubCodes
1         A1        1
1                   30
1         B2        23
1                   35
2         A1        1
2                   30
2         A1        6
2                   10
2                   12
2         C3        2
2         C3        4

Я хочу создать основные "группы" и второстепенные "группы" с использованием форматирования. Я не обязательно хочу использовать функцию группировки Excel. Я хотел бы сначала сгруппировать по идентификатору, что достаточно легко, и добавить большую жирную границу после каждого идентификатора.
Часть, с которой у меня возникли проблемы, - это второстепенные группы, поскольку у подкодов нет родительского кода на его строке, если есть более 1, и может быть несколько кодов с разными подкодами, которые отличаются. Затем подгрупповая бы граница слабее после каждого.

вот пример желаемого форматирования:

ID        Code      SubCodes
============================
1         A1        1
1                   30
----------------------------
1         B2        23
1                   35
============================
2         A1        1
2                   30
----------------------------
2         A1        6
2                   10
2                   12
----------------------------
2         C3        2
----------------------------
2         C3        4
============================

Итак, как я могу заставить эти незначительные группы включать строки с пустыми кодами под ними?


Это предпочтительно будет в макросе, так как файл экспортируется из программы, а затем должен быть отформатирован. Однако если есть лучший способ, я определенно открыт для этого. Конечная цель состоит в том, чтобы сделать данные легко читаемыми.

вот код, который у меня есть, чтобы создать форматирование для основной группировки.

Sub Macro1()

    Dim StartRow As String
    Dim LastRow As Integer
    Dim Rng As Range
    Dim cValue As String

    Application.ScreenUpdating = False

    StartRow = "1"
    LastRow = ActiveSheet.UsedRange.Rows.Count
    Set Rng = Range("A" & StartRow, "A" & LastRow)

    Cells.ClearOutline

    cValue = Range("A" & StartRow).Value
    For Each Cell In Rng
        If Cell.Value <> cValue Then
            With Cell.Borders(xlEdgeTop)
                .LineStyle = xlContinuous
                .ColorIndex = 0
                .TintAndShade = 0
                .Weight = xlMedium
            End With
        Else
            cValue = Cell.Value
        End If
    Next Cell

    Application.ScreenUpdating = True 

End Sub
14
задан ElectronicDrug
02.02.2023 17:18 Количество просмотров материала 2842
Распечатать страницу

1 ответ

Это должно работать (изменить по вашему вкусу) -

Sub Macro1()

     Dim LastRow As Integer
     LastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
     ActiveSheet.Cells.Borders.LineStyle = xlNone

    For Each c In Range("A1:A" & LastRow)
        If c <> c.Offset(1) Then
            With Range(c, c.Offset(, 2)).Borders(xlEdgeBottom)
                .LineStyle = xlContinuous
                .ColorIndex = 0
                .TintAndShade = 0
                .Weight = xlMedium
            End With

        End If
    Next

    For Each c In Range("B1:B" & LastRow)
        If c.Borders(xlEdgeBottom).LineStyle = xlNone And c.Offset(1) <> "" Then
            With Range(c.Offset(, -1), c.Offset(, 1)).Borders(xlEdgeBottom)
                .LineStyle = xlDashDot
            End With
        End If
    Next

End Sub
1
отвечен Raystafarian 2023-02-04 01:06

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх