powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Макрос для объединения ячеек
56 сообщений из 56, показаны все 3 страниц
Макрос для объединения ячеек
    #34395782
McGruber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день всем.
В написании макросов опыта нет совсем, а задачу небольшую необходимо решить)
Нужен макрос, который бы для первого столбца таблицы в Excel объединил подряд идущие ячейки с одинаковыми значениями.
Может быть кто-то уже решал такую задачу и может помочь?)
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34395870
andMegaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может тебе просто нужна сортировка (по убыванию или возростанию)? Не совсем понятно. Если можно пример
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34395932
McGruber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет, сортировка не то, что мне надо
Например, в таблице данные
|1|2|3|
|1|2|3|
|1|2|3|
|2|2|3|
|2|2|3|
|2|2|3|
а после выполнения макроса получим
| |2|3|
|1|2|3|
| |2|3|
| |2|3|
|2|2|3|
| |2|3|
с объединением соотв-их ячеек первого столбца.
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34396574
andMegaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Само объединение сделать не сложно,но если только знать диапазон объединяемых ячеек.
Я думаю как бы вот узнать адрес первой и последней объединяемой ячейки, потом в цикле по всему столбцу. Может кто-нибудь знает? Самому стало интересно.
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34396670
Oleg_Slip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то так, но, думаю, можно оптимизировать.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Sub qqq()

    j =  1 : k =  1 

    For i =  1  To UsedRange.Rows.Count
        If Cells(i,  1 ).Value = Cells(i +  1 ,  1 ).Value Then
           k = k +  1 : Cells(i,  1 ).Value = ""
        Else
           With Range(Cells(j,  1 ).Address, Cells(k,  1 ).Address)
                .MergeCells = True
                .VerticalAlignment = xlCenter
           End With
           j = i +  1 : k = i +  1 
        End If
    Next i
        
End Sub
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34396745
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
McGruberНет, сортировка не то, что мне надо
Например, в таблице данные
|1|2|3|
|1|2|3|
|1|2|3|
|2|2|3|
|2|2|3|
|2|2|3|
а после выполнения макроса получим
| |2|3|
|1|2|3|
| |2|3|
| |2|3|
|2|2|3|
| |2|3|
с объединением соотв-их ячеек первого столбца.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Sub test1()
Dim RowIndex As Long
Dim StartRow As Long
Dim LastRow As Long
Dim ColumnToMerge As Long
    
    StartRow =  1  ' с какой строки начинать
    ColumnToMerge =  1  ' в какой колонке объединять

    LastRow = Cells(Rows.Count, ColumnToMerge).End(xlUp).Row

    Application.DisplayAlerts = False

    For RowIndex = StartRow +  1  To LastRow
        With Cells(RowIndex, ColumnToMerge)
            If .Value = .Offset(- 1 ,  0 ).MergeArea.Cells( 1 ).Value Then
                Range(Cells(RowIndex, ColumnToMerge), .Offset(- 1 ,  0 )).Merge
            End If
        End With
    Next RowIndex

    Application.DisplayAlerts = True
    
End Sub




andMegaMСамо объединение сделать не сложно,но если только знать диапазон объединяемых ячеек.
Я думаю как бы вот узнать адрес первой и последней объединяемой ячейки, потом в цикле по всему столбцу. Может кто-нибудь знает? Самому стало интересно.до объединения или после?
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34396852
McGruber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое всем ответившим, последний вариант делает сейчас именно то,что мне и надо)
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34609181
Dimen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А можно ли сделать так, что бы объединялися ячейки любого выделенного диапазона построчто, без потери данных (примерно как в Worde), только что бы в одну строчку, с пробелом между данными из ячеек?
Заранее благодарен.
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34609234
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimenА можно ли сделать так, что бы объединялися ячейки любого выделенного диапазона построчто, без потери данных (примерно как в Worde), только что бы в одну строчку, с пробелом между данными из ячеек?
Заранее благодарен.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Sub Test()
Dim irow As Range, icel As Range, MergeVal As String
 Application.DisplayAlerts = False
   For Each irow In Selection.Rows
     For Each icel In irow.Cells
       If icel.Value <> "" Then MergeVal = MergeVal & icel.Value & " "
     Next icel
   If MergeVal <> "" Then irow( 1 ).Value = Left(MergeVal, Len(MergeVal) -  1 )
   MergeVal = ""
   irow.Merge
   Next irow
 Application.DisplayAlerts = True
End Sub
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34610077
McGruber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ещё маленькая задачка на объединение ячеек.
Необходимо пройтись по таблице начиная со строки X, и если в ячейке Y значение начинается с 'Лист', то объединить ячейки в этой строке с 1-ой по Z-ую в одну.
Спасибо всем, кто захочет помочь.
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34610144
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
McGruberЕщё маленькая задачка на объединение ячеек.
Необходимо пройтись по таблице начиная со строки X, и если в ячейке Y значение начинается с 'Лист', то объединить ячейки в этой строке с 1-ой по Z-ую в одну.
Спасибо всем, кто захочет помочь.

Имеется ввиду посмотреть первый столбец листа, начиная с X-строки и до конца. Если начинается 'Лист', то в этой строке с 1 до z-го столбца объединить строку с разделителем " "(пробел)?
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34610168
McGruber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, именно, разве что столбец второй
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34610215
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
McGruberДа, именно, разве что столбец второй

Щас пообедаю, если никто не предложит, то сделаю!
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34610515
Dimen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Deggasad спасибо за код, работает отлично!
А есть пример как все это обратно вернуть по столбцам,
можно конечно через "разбить по столбцам", но хотелось бы также программно, любой выделенный диапазон.
Заранее благодарю!
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34610866
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deggasad McGruberДа, именно, разве что столбец второй

Щас пообедаю, если никто не предложит, то сделаю!

Пообедал

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Sub Test2()
Dim firstRow As Long, lastRow As Long, lastCol As String, SearchChar As String
Dim irow As Range, icel As Range, MergeVal As String
'номер первой строки
firstRow =  45 
' номер последней строки
lastRow = ActiveSheet.Range(firstCol & firstRow & ":" & firstCol & Rows.Count) _
   .Find("*", , , , xlByRows, xlPrevious).Row
'буква последнего столбца
firstCol = "B"
lastCol = "G"
SearchChar = "'Лист'"

 Application.DisplayAlerts = False
   For Each irow In Range(firstCol & firstRow & ":" & lastCol & lastRow).Rows
    If InStr(irow.Cells( 1 ).Value, SearchChar) =  1  Then
     For Each icel In irow.Cells
       If icel.Value <> "" Then MergeVal = MergeVal & icel.Value & " "
     Next icel
     irow.Cells( 1 ).Value = Left(MergeVal, Len(MergeVal) -  1 )
     MergeVal = ""
     irow.Merge
    End If
   Next irow
 Application.DisplayAlerts = True
End Sub
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34610919
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimenDeggasad спасибо за код, работает отлично!
А есть пример как все это обратно вернуть по столбцам,
можно конечно через "разбить по столбцам", но хотелось бы также программно, любой выделенный диапазон.
Заранее благодарю!

Может так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Sub UnTest()
Dim irow As Range, icel As Range, MergeVal As String, x As Variant, y
 Application.DisplayAlerts = False
   For Each irow In Selection.Rows
     With irow
       If .MergeCells Then
          .UnMerge
         ' разделитель " "(пробел)
         x = Split(.Cells( 1 ).Value, " ")
         For y =  0  To UBound(x)
          .Cells( 1 ).Offset( 0 , y).Value = x(y)
         Next
       End If
     End With
   Next irow
 Application.DisplayAlerts = True
End Sub
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34611049
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deggasad
Может так

Код: plaintext
1.
2.
3.
4.
         x = Split(.Cells( 1 ).Value, " ")
         For y =  0  To UBound(x)
          .Cells( 1 ).Offset( 0 , y).Value = x(y)
         Next


лучше наверное так, без цыклов:

Код: plaintext
1.
   x = Split(.Cells( 1 ).Value, " ")
   .Cells( 1 ).Resize(,  1  + UBound(x)) = x

а еще лучше записать макрос во время выполнения "разбить по столбцам" и слегка подчистить код :-)

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34611067
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL)
а еще лучше записать макрос во время выполнения "разбить по столбцам" и слегка подчистить код :-)
KL
[MVP - Microsoft Excel]

Привет
Пробовал. Мне не понравилось почему-то.
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34611158
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deggasad KL (XL)
а еще лучше записать макрос во время выполнения "разбить по столбцам" и слегка подчистить код :-)
Привет
Пробовал. Мне не понравилось почему-то.

Странно, весь твой код можно заменить на несравненно более быстрый и более короткий:

Код: plaintext
1.
2.
3.
4.
Sub Macro1()
    With Selection
        .TextToColumns .Cells( 1 ), xlDelimited, , True, , , , True
    End With
End Sub

или для пущей понятности:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Sub Macro2()
    With Selection
        .TextToColumns _
            Destination:=.Cells( 1 ), _
            DataType:=xlDelimited, _
            ConsecutiveDelimiter:=True, _
            Space:=True
    End With
End Sub

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34611266
McGruber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Deggasad , спасибо большое, всё отлично работает
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34611283
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вот так, то практически да

Код: plaintext
1.
2.
3.
4.
5.
Sub Macro1()
    With Selection
        .UnMerge
        .Columns( 1 ).TextToColumns .Cells( 1 ), xlDelimited, , True, , , , True
    End With
End Sub

Я просто там ещё проверки ещё какие-то вставлял может и зря. Ну Если тоже делать то и мой код сокращается

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Sub UnTest()
Dim icel As Range, x As Variant
  Selection.UnMerge
  For Each icel In Selection.Columns( 1 ).Rows
    x = Split(icel.Value, " ")
    If UBound(x) >=  0  Then icel.Resize(,  1  + UBound(x)) = x
  Next
End Sub
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34611612
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deggasad...Ну Если тоже делать то и мой код сокращается

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Sub UnTest()
Dim icel As Range, x As Variant
  Selection.UnMerge
  For Each icel In Selection.Columns( 1 ).Rows
    x = Split(icel.Value, " ")
    If UBound(x) >=  0  Then icel.Resize(,  1  + UBound(x)) = x
  Next
End Sub


Да, но только внешне, т.к. один из цыклов все равно остается, а Split - функция сравнительно медленная если память мне не изменяет :-)

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34611689
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL) Deggasad...Ну Если тоже делать то и мой код сокращается

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Sub UnTest()
Dim icel As Range, x As Variant
  Selection.UnMerge
  For Each icel In Selection.Columns( 1 ).Rows
    x = Split(icel.Value, " ")
    If UBound(x) >=  0  Then icel.Resize(,  1  + UBound(x)) = x
  Next
End Sub


Да, но только внешне, т.к. один из цыклов все равно остается, а Split - функция сравнительно медленная если память мне не изменяет :-)

KL
[MVP - Microsoft Excel]

Я полностью с тобой согласен, только вот тот же текст по столбцам этож тоже цикл наверное!

Ещё вариант

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Sub UnTest2()
Dim icel As Range, x As Variant
 
With Selection
  .UnMerge
  Set icel = .Columns( 1 ).Find("*", , , , xlByRows, xlPrevious)
   If Not icel Is Nothing Then
     firstAddress = icel.Address
     Do
       x = Split(icel.Value, " ")
       icel.Resize(,  1  + UBound(x)) = x
       Set icel = .Columns( 1 ).FindNext(icel)
     Loop While Not icel Is Nothing And icel.Address <> firstAddress
   End If
End With

End Sub
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34611926
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeggasadЯ полностью с тобой согласен, только вот тот же текст по столбцам этож тоже цикл наверное!

Конечно, но с крооооошечной оговоркой: этот цикл написан в C, а не VBA ;-)

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34611983
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL)
Конечно, но с крооооошечной оговоркой: этот цикл написан в C, а не VBA ;-)
KL
[MVP - Microsoft Excel]

Это хорошо или плохо?
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34611991
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deggasad KL (XL)
Конечно, но с крооооошечной оговоркой: этот цикл написан в C, а не VBA ;-)Это хорошо или плохо?это быстрее
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34612065
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl Deggasad KL (XL)
Конечно, но с крооооошечной оговоркой: этот цикл написан в C, а не VBA ;-)Это хорошо или плохо?это быстрее

Быстрее - это просто не то слово :-)

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34612070
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL) White Owl Deggasad KL (XL)
Конечно, но с крооооошечной оговоркой: этот цикл написан в C, а не VBA ;-)Это хорошо или плохо?это быстрее

Быстрее - это просто не то слово :-)

KL
[MVP - Microsoft Excel]

Ну я в этом дилетант
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34848099
AlexFred
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые!
Не могли бы вы помочь, программа работает великолепно.
Единственное, нельзя бы было усовершенствовать программу, чтобы ячейки объединялись на одной странице (не Листе), а со следующей страницы начиналось объединение заново.
Заранее благодарен =)
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34848933
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так если сходу переделать код vbapro , то см. ниже...
Можно оптимизировать по скорости если это критично, но нужно время...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
Sub test2()
Dim RowIndex As Long
Dim StartRow 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
    
    StartRow =  2  ' с какой строки начинать
    ColumnToMerge =  2  ' в какой колонке объединять

    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
                    Range(Cells(RowIndex, ColumnToMerge), .Offset(- 1 ,  0 )).Merge
                End If
            End With
        Next RowIndex
        
        StartRow = pageLastRow(ihPB) +  1 
    Next ihPB

    Application.DisplayAlerts = True
    
End Sub
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34849652
AlexFred
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DeggasadТак если сходу переделать код vbapro , то см. ниже...
Можно оптимизировать по скорости если это критично, но нужно время...


Супер! Я думал это вообще нереально сделать =)
Скорость выполнения, тут как раз не совсем важный фактор. Важен результат.
Единственная просьба, узвеняюсь за надоедливость, если это возможно. Ещё небольшое дополнение.
Если проводить объединение уже во втором столбце, то не учитывается, результаты объединения в первом, а очень бы хотелось, так же с учетом разбиения на страницы :mol: Если это возможно

Поясню

исходные данные
|1|2|3
|1|2|3
|1|2|5
|1|2|3
|1|2|7
|1|2|3
|2|2|9
|2|2|3

результат
исходные данные
|1|2|3
| | |3
| | |5
| | |3
| | |7
| | |3
|2| 2 |9
| |2|3

Иначе, 2-й стобец превращается в единое целое на странице
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34849927
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
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
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34850338
AlexFred
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!

Единственно, если проводить объединение, относительно 3-го столбца, то почему-то он не реагирует на параметр флаг. Т.е. получается так, что в третьем столбце обединяются все ячейки =(
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34850412
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexFredСпасибо!

Единственно, если проводить объединение, относительно 3-го столбца, то почему-то он не реагирует на параметр флаг. Т.е. получается так, что в третьем столбце обединяются все ячейки =(

Если ячейки во втором столбце уже объединены, то

вместо
Код: plaintext
If .Offset( 0 , - 1 ).MergeArea( 1 ).Value = .Offset(- 1 , - 1 ).MergeArea( 1 ).Value Then

можно использовать условие

Код: plaintext
If .Offset( 0 , - 1 ).MergeArea.Address = .Offset(- 1 , - 1 ).MergeArea.Address Then

оно есть в предыдущем посте в примечании
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #34850483
AlexFred
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Семен Семеныч...
Отлично. Очень нужная вещь получилась, причем,уверен, не только мне 8)
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #35124783
AlexFred
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Deggasad

Доброе время суток. Не могли бы вы ещё раз оказать помощь.
По непонятной причине стала выскакивать ошибка

Microsoft Visual Basic
Run-time error '9'
Subscript out of range

1. Чем это может быть вызвано?
2. Как с этим бороться?

Заранее благодарен.
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #35124898
AlexFred
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Опытным путем выяснилось, что "беда" (см. пост выше) начинается где-то, если масив превышает 7-8 тыс. записей
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #35127123
AlexFred
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И, если возможно, в алгоритме убрать анализ окончания страницы, т.е. чтобы объединение ячеек шло без учёта страницы
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #35127652
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Насчёт ошибки: с этой разметкой страниц постоянного заморочки. Конкретно данный случай должен лечится переходом в режим разметки страницы.
Т.е. вместо
Код: plaintext
1.
2.
3.
4.
5.
    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

Пишем

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
  ActiveWindow.View = xlPageBreakPreview
    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
  ActiveWindow.View = xlNormalView

А насчёт убрать анализ окончания страницы, то примеры были ранее. В этой задачке как раз и был смысл с учётом страниц.
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #35127777
AlexFred
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DeggasadА насчёт убрать анализ окончания страницы, то примеры были ранее. В этой задачке как раз и был смысл с учётом страниц.

Были приведены примеры, которые не учитывали результаты объединения в первом столбце =(
Ваш макрос выполняет объединение, как с учетом объединения, так и с учетом разбиения таблицы на страницы . К сожалению иногда требуется, когда учет разбиения на страницы не производится.
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #35131366
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот на скорую руку, а то так совсем про эту тему забуду

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
Dim StartRow As Long
Dim ColumnToMerge As Long
Dim flagCol As Boolean
Dim flagPag As Boolean


Sub test()
' объединяет ячейки содинаковыми значениями на странице в указанном столбце
Dim LastRow As Long
Dim countHPageBreak As Long
Dim hPB As HPageBreak
Dim pageLastRow() As Variant
Dim i As Long, ihPB As Long
    
    StartRow =  2  ' с какой строки начинать
    ColumnToMerge =  2  ' в какой колонке объединять
    flagCol = True   ' учитывать ли значения слева False - нет, True - да
    flagPag = False  ' учитывать ли разбиение страниц False - нет, True - да
    
 LastRow = Cells(Rows.Count, ColumnToMerge).End(xlUp).Row

    
Application.DisplayAlerts = False
If flagPag Then

    countHPageBreak = ActiveSheet.HPageBreaks.Count
    
    ReDim pageLastRow(countHPageBreak) As Variant
    
  ActiveWindow.View = xlPageBreakPreview
    i =  0 
    For Each hPB In ActiveSheet.HPageBreaks
     pageLastRow(i) = hPB.Location.Row -  1 
     i = i +  1 
    Next hPB
 ActiveWindow.View = xlNormalView
    pageLastRow(countHPageBreak) = LastRow
        
     For ihPB =  0  To countHPageBreak
       myMerg pageLastRow(ihPB)
       StartRow = pageLastRow(ihPB) +  1 
     Next ihPB
     
Else
   
      myMerg LastRow
    
End If
Application.DisplayAlerts = True

End Sub


Sub myMerg(ByVal lastToMerg As Long)
Dim RowIndex As Long
        
        For RowIndex = StartRow +  1  To lastToMerg
            
            With Cells(RowIndex, ColumnToMerge)
                
                If .Value = .Offset(- 1 ,  0 ).MergeArea.Cells( 1 ).Value Then
                  If flagCol 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
End Sub
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #35131755
AlexFred
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Deggasad

Спасибо вам ОГРОМНОЕ!
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #35137513
DimenА можно ли сделать так, что бы объединялися ячейки любого выделенного диапазона построчто, без потери данных (примерно как в Worde), только что бы в одну строчку, с пробелом между данными из ячеек?
Заранее благодарен.


Подскажите, пожалуйста, как сделать то, что описано выше^^^, но БЕЗ ПРОБЕЛА между данными. Очень нужно.
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #35137588
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Sub Test()
Dim irow As Range, icel As Range, MergeVal As String
 Application.DisplayAlerts = False
   For Each irow In Selection.Rows
     For Each icel In irow.Cells
       If icel.Value <> "" Then MergeVal = MergeVal & icel.Value ' & " " ' закоментировал конец строки и получилось без пробела
     Next icel
   If MergeVal <> "" Then irow( 1 ).Value = Left(MergeVal, Len(MergeVal) -  1 )
   MergeVal = ""
   irow.Merge
   Next irow
 Application.DisplayAlerts = True
End Sub
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #35137637
Deggasad
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Sub Test()
Dim irow As Range, icel As Range, MergeVal As String
 Application.DisplayAlerts = False
   For Each irow In Selection.Rows
     For Each icel In irow.Cells
       If icel.Value <> "" Then MergeVal = MergeVal & icel.Value ' & " " ' закоментировал конец строки и получилось без пробела
     Next icel
   If MergeVal <> "" Then irow( 1 ).Value = Left(MergeVal, Len(MergeVal) -  1 )
   MergeVal = ""
   irow.Merge
   Next irow
 Application.DisplayAlerts = True
End Sub


Пробел пропал, но вместе с ним пропадает последний символ самого правого столбца в каждой строке
Было: | 123 | 456 | 789 |
стало: | 12345678 |
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #35137652
Все, разобрался, там "-1" стояло. Спасибо большое за помощь!
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #35137664
Еще один вопрос может подскажете. Как поставить точку в конце каждой ячейки. Допустим в ячейке "555", а нужно чтоб было "555." Все ячейки в одном столбце.
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #35137825
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pasha_24@ukrpost.netЕще один вопрос может подскажете. Как поставить точку в конце каждой ячейки. Допустим в ячейке "555", а нужно чтоб было "555." Все ячейки в одном столбце.

Допустим наш столбец это столбец A:A, пишем в B1 формулу =A1&"." растягуем вниз, затем копируем как значения в столбец A:A если нужно. ТОлько если разделитель дробной части - точка, то предварительно наверное придётся присвоить текстовый формат.

Макросом

Код: plaintext
1.
2.
3.
Sub Макрос2()
    [A1:A4].NumberFormat = "@"
    [A1:A4] = [A1:A4 & "."]
End Sub
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #35205759
AlexFred
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DeggasadВот на скорую руку, а то так совсем про эту тему забуду


Доброе время суток

Программа работает великолепно. Однако появилась ситуация, когда при объединение ячеек (с учётом страниц) образовалась ячейка, высота которой оказалась меньше высоты текста, который должен в ней находится... Не могли бы вы помочь решить эту проблему... Что бы при объединение ячеек (не зависимо от условия объединения :с учётом страниц или без ) происходил бы анализ высоты находящегося в ней текста и высота ячейки подстраивалась бы под высоту текста.(чтобы высота ячейки не оказалась меньше высоты текста) Если в ручную делать всё расползается =(
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #35206071
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я не могу, я вообще не очень люблю объядинять ячейки. может воспользоваться сводной таблицей. Предварительно сделав столбец с уникальным ключём для каждой записи чтобы в сводной все строки отображались. Только тогда не будут страницы учитываться
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #35206119
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть способы: adjust hight of merged cells , но вообще объединенные ячейки - это бяка.

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #35206187
AlexFred
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я это предполагал =(
Вы и так очень силино помогли, спасибо!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Макрос для объединения ячеек
    #36117884
jykvwv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vbapro, а как сделать точно такой же макрос, но только для предварительно выделенного диапазона значений?
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #36192271
biser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток. Нужен макрос переноса содержимого нижеследующих строк в верхнюю с пробелом между ними(или запятой). Все данные находятся в одном столбце. Помогите пожалуста.
...
Рейтинг: 0 / 0
Макрос для объединения ячеек
    #36192475
biser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и еще нужен один макрос: Объединение строк одного столбца с пробелом между данными без потери содержимого... краЯ как нужна...
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Макрос для объединения ячеек
    #37858974
alenkoch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как будет выглядеть макрос, которые будет объединять пустые ячейки в строке, пока не встретит непустую ячейку?
...
Рейтинг: 0 / 0
56 сообщений из 56, показаны все 3 страниц
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Макрос для объединения ячеек
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]