четверг, 26 сентября 2013 г.

VBA merge cells

VBA объединение ячеек


Sub test()
' объединяет ячейки содинаковыми значениями на странице в указанном столбце
Dim RowIndex As Long
Dim StartRow As Long
Dim LastRow As Long
Dim ColumnToMerge As Long
Dim countHPageBreak As Long
Dim hPB As HPageBreak
Dim pageLastRow() As Variant
Dim i As Long, ihPB As Long
Dim flag As Boolean
   
   
    StartRow = 2 ' с какой строки начинать
    ColumnToMerge = 2 ' в какой колонке объединять
    flag = True  ' учитывать ли значения слева False - нет, True - да
    countHPageBreak = ActiveSheet.HPageBreaks.Count
   
    ReDim pageLastRow(countHPageBreak) As Variant
   
    i = 0
    For Each hPB In ActiveSheet.HPageBreaks
     pageLastRow(i) = hPB.Location.Row - 1
     i = i + 1
    Next hPB
    pageLastRow(countHPageBreak) = Cells(Rows.Count, ColumnToMerge).End(xlUp).Row
   
   
   
    Application.DisplayAlerts = False
    For ihPB = 0 To countHPageBreak
       
        For RowIndex = StartRow + 1 To pageLastRow(ihPB)
           
            With Cells(RowIndex, ColumnToMerge)
               
                If .Value = .Offset(-1, 0).MergeArea.Cells(1).Value Then
                  If flag Then
                     If .Offset(0, -1).MergeArea(1).Value = .Offset(-1, -1).MergeArea(1).Value Then  '.Offset(0, -1).MergeArea.Address <> .Offset(-1, -1).MergeArea.Address Then
                         Range(Cells(RowIndex, ColumnToMerge), .Offset(-1, 0)).Merge
                     End If
                   Else
                  Range(Cells(RowIndex, ColumnToMerge), .Offset(-1, 0)).Merge
                  End If
                End If
         
            End With
           
           
        Next RowIndex
       
        StartRow = pageLastRow(ihPB) + 1
    Next ihPB
    Application.DisplayAlerts = True
End Sub



Комментариев нет:

Отправить комментарий

Постоянные читатели

Популярные сообщения