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

Первая строка - это, конечно, строка заголовка с фильтром. То, что я хочу иметь, должно быть таким

Excel после слияния

Таким образом, я все еще могу сортировать вещи по всем столбцам (поэтому крутые велосипеды покажут мне 4 строки) Есть ли макрос или сценарий, который может это сделать и не реагировать на размер листа (иногда несколько тысяч строк) И не будет нужно вручную изменить и настроить для каждого листа?

Заранее благодарю за любую помощь.

2 ответа2

1

Если это проблема отображения, вы можете просто использовать условное форматирование.

Правило будет:

=$C1=$C2

и формат будет под Number Format пользовательского формата: ;;;

И независимо от того, по какому столбцу вы отсортировали, этот слоган также будет применяться к пустым строкам, появляющимся над ним, как в вашем примере.

Эта сортировка и применение условного форматирования может быть сделано в макросе, если хотите.

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

0

Этот макрос должен работать:

Public Sub merger()
    Application.DisplayAlerts = False
    Dim wkb As Workbook
    Dim wks As Worksheet
    Set wkb = ThisWorkbook
    Set wks = wkb.Sheets("Sheet1")
    firstrow = 2
    lastcolumn = "Z"
    columnsortkey = "C"
    columnmerge = 3
    Columns("A:" & lastcolumn).Sort key1:=Range(columnsortkey & ":" & columnsortkey), Header:=xlYes
    theEnd = False
    thisrow = firstrow
    found = False
    Count = 0
    While theEnd = False
        firstCell = wks.Cells(thisrow, columnmerge)
        nextCell = wks.Cells(thisrow + 1, columnmerge)
        If firstCell = nextCell Then
            If found = False Then
                found = True
                mergerfirst = thisrow
                Count = Count + 1
            Else
                Count = Count + 1
            End If
        Else
            If found = True Then
                Range(Cells(mergerfirst, columnmerge), Cells(mergerfirst + Count, columnmerge)).Merge
                found = False
                Count = 0
            End If
        End If
        thisrow = thisrow + 1
        If firstCell = "" Then theEnd = True
    Wend
    Application.DisplayAlerts = True
End Sub

Чтобы это работало, вы должны открыть VBA/Macros с помощью ALT+ F11, затем в ThisWorkbook вставить новый модуль и вставить код.

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