Объединить строки по границам (сложно) - VBA

Узнай цену своей работы

Формулировка задачи:

Подскажите пожалуйста, как объединить строки по границам, т.е. между строками которые надо объединить есть границы границы невидны (в файле примере есть, но можно соориентироватся по столбцу правильный ответ, над каждым правильным ответом есть граница)
          правильный ответ    
стольец 1 стольец 2 стольец 3     стольец 1 стольец 2 стольец 3
12 345 ццццццц лллл     12 345 ццццццц лллл
  фффффф дддд     12 ффффффввввввывв дддддддд
  ввввв            
    дддд          
12 вывв            
  ццццц зззз     546 цццццуууууцццц зззз12345
               
546 ууууу 12345          
  цццц            
  14111111 ьбюбьб     987 14111111цццц 11111йййй: 123 ьбюбьб
  цццц 11111            
987 йййй: 123            
               
987 14111111 длдж     987 14111111цццц 11111йййй: 123 длджждэжждэж
  цццц 11111 ждэж          
  йййй: 123 ждэж          

Решение задачи: «Объединить строки по границам (сложно)»

textual
Листинг программы
Sub pr()
    Dim b&(), x As Range, k&, i&, c(), rng As Range
    Set rng = ActiveSheet.UsedRange.Columns(1)
    Set rng = rng.Cells(3).Resize(rng.Cells.Count - 2)
    a = rng.Resize(, 3).Value
    k = rng.Cells(1).Offset(-1).Row
    For Each x In rng
        If x.Borders(9).LineStyle = 1 Then
            i = i + 1
            ReDim Preserve b(i)
            b(i) = x.Row - k
        End If
    Next
    ReDim c(1 To UBound(b), 1 To UBound(a, 2))
    For i = 1 To UBound(b)
        For j = b(i - 1) + 1 To b(i)
            For k = 1 To UBound(a, 2)
                c(i, k) = c(i, k) & a(j, k)
            Next
        Next
    Next
    rng.Cells(1).Offset(, 4).Resize(UBound(c), UBound(c, 2)) = c
End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5
Похожие ответы