Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Объединение ячеек - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Объединение ячеек (Макросы Sub)
Объединение ячеек
Эмка Дата: Четверг, 26.09.2013, 14:16 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 1 ±
Замечаний: 0% ±

Excel 2007
Количество строк в таблице динамически меняется, необходимо в первой колонке ячейки с одинаковым содержанием объединить, повторять действие пока в колонке Р не появляется пустая ячейка.
Пыталась сделать макрос, но могу понять как выделить две ячейки. Макрос слабоват. так что надеюсь ругаться не сильно будете
К сообщению приложен файл: 0200565.xls (38.0 Kb)
 
Ответить
СообщениеКоличество строк в таблице динамически меняется, необходимо в первой колонке ячейки с одинаковым содержанием объединить, повторять действие пока в колонке Р не появляется пустая ячейка.
Пыталась сделать макрос, но могу понять как выделить две ячейки. Макрос слабоват. так что надеюсь ругаться не сильно будете

Автор - Эмка
Дата добавления - 26.09.2013 в 14:16
Матраскин Дата: Четверг, 26.09.2013, 15:57 | Сообщение № 2
Группа: Друзья
Ранг: Обитатель
Сообщений: 375
Репутация: 81 ±
Замечаний: 0% ±

20xx
' настроить мерж чтобы не было ошибок, либо удалять Select,
' делать Merge ячеек и вставлять число в объед. ячеку
[vba]
Код
Sub m()
      Dim i As Integer, n As Integer
      n = 16
      Application.DisplayAlerts = False
      While Cells(16 + i, 16) <> ""
         If Cells(16 + i, 1) = Cells(17 + i, 1) Then
            Range(Cells(n, 1), Cells(17 + i, 1)).Select
            If Cells(17 + i, 1) <> Cells(18 + i, 1) Then
               Range(Cells(n, 1), Cells(17 + i, 1)).Merge      
            End If                        
         Else
            n = 17 + i
         End If
         i = i + 1
      Wend
      Application.DisplayAlerts = True
End Sub
[/vba]

Из нижнего поста почерпнул ковш опыта и добавил Application.DisplayAlerts = False и Application.DisplayAlerts = True, не знал такого, спасибо! И мне явно дали понять что можно короче писать yes


в интернете опять кто-то не прав

Сообщение отредактировал Матраскин - Пятница, 27.09.2013, 09:22
 
Ответить
Сообщение' настроить мерж чтобы не было ошибок, либо удалять Select,
' делать Merge ячеек и вставлять число в объед. ячеку
[vba]
Код
Sub m()
      Dim i As Integer, n As Integer
      n = 16
      Application.DisplayAlerts = False
      While Cells(16 + i, 16) <> ""
         If Cells(16 + i, 1) = Cells(17 + i, 1) Then
            Range(Cells(n, 1), Cells(17 + i, 1)).Select
            If Cells(17 + i, 1) <> Cells(18 + i, 1) Then
               Range(Cells(n, 1), Cells(17 + i, 1)).Merge      
            End If                        
         Else
            n = 17 + i
         End If
         i = i + 1
      Wend
      Application.DisplayAlerts = True
End Sub
[/vba]

Из нижнего поста почерпнул ковш опыта и добавил Application.DisplayAlerts = False и Application.DisplayAlerts = True, не знал такого, спасибо! И мне явно дали понять что можно короче писать yes

Автор - Матраскин
Дата добавления - 26.09.2013 в 15:57
RAN Дата: Четверг, 26.09.2013, 20:48 | Сообщение № 3
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Матраскин, Мяу!

[vba]
Код
Sub Мяу()
         Application.DisplayAlerts = False
             Range(Cells(16, "p"), Cells(16, "P").End(xlDown)).Offset(, -15).Merge
         Application.DisplayAlerts = True
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеМатраскин, Мяу!

[vba]
Код
Sub Мяу()
         Application.DisplayAlerts = False
             Range(Cells(16, "p"), Cells(16, "P").End(xlDown)).Offset(, -15).Merge
         Application.DisplayAlerts = True
End Sub
[/vba]

Автор - RAN
Дата добавления - 26.09.2013 в 20:48
Матраскин Дата: Пятница, 27.09.2013, 09:16 | Сообщение № 4
Группа: Друзья
Ранг: Обитатель
Сообщений: 375
Репутация: 81 ±
Замечаний: 0% ±

20xx
RAN, мяв
что то твой макрос объединил всё в 1 ячейку у меня yes


в интернете опять кто-то не прав
 
Ответить
СообщениеRAN, мяв
что то твой макрос объединил всё в 1 ячейку у меня yes

Автор - Матраскин
Дата добавления - 27.09.2013 в 09:16
Alex_ST Дата: Пятница, 27.09.2013, 13:19 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
А у меня в заначке лежит такой макрос:[vba]
Код
Sub Merge_Similar_in_Columns()   ' группировать ячейки с одинаковыми значениями, идущие в столбцах подряд
    If TypeName(Selection) <> "Range" Then Exit Sub
    If Selection.Cells.Count <= 1 Then Exit Sub
    Dim rColumn As Range, rCell As Range, sAddress$, rMerge As Range, rTarget As Range
    Application.ScreenUpdating = False: Application.DisplayAlerts = False
    Set rTarget = Intersect(Selection, ActiveSheet.UsedRange)
    For Each rCell In rTarget      ' разгруппировать с заполнением значениями (на всякий случай)
       If rCell.MergeCells Then
          sAddress = rCell.MergeArea.Address: rCell.UnMerge   ' разгруппировать
          Range(sAddress).Value = rCell.Value   ' заполнить
       End If
    Next
    rTarget.Select
    'Stop
    For Each rColumn In rTarget.Columns
       For Each rCell In rColumn.Cells   ' группировать ячейки с одинаковыми значениями
          If rMerge Is Nothing Then
             Set rMerge = rCell
          Else
             If rMerge(1).Value = rCell.Value Then
                Set rMerge = Union(rMerge, rCell): rMerge.Merge
             Else
                Set rMerge = rCell
             End If
          End If
       Next
       Set rMerge = Nothing
    Next
    Application.ScreenUpdating = True: Application.DisplayAlerts = True
End Sub
[/vba]
Редко, но им пользуюсь. Сбоев, вроде, не даёт



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеА у меня в заначке лежит такой макрос:[vba]
Код
Sub Merge_Similar_in_Columns()   ' группировать ячейки с одинаковыми значениями, идущие в столбцах подряд
    If TypeName(Selection) <> "Range" Then Exit Sub
    If Selection.Cells.Count <= 1 Then Exit Sub
    Dim rColumn As Range, rCell As Range, sAddress$, rMerge As Range, rTarget As Range
    Application.ScreenUpdating = False: Application.DisplayAlerts = False
    Set rTarget = Intersect(Selection, ActiveSheet.UsedRange)
    For Each rCell In rTarget      ' разгруппировать с заполнением значениями (на всякий случай)
       If rCell.MergeCells Then
          sAddress = rCell.MergeArea.Address: rCell.UnMerge   ' разгруппировать
          Range(sAddress).Value = rCell.Value   ' заполнить
       End If
    Next
    rTarget.Select
    'Stop
    For Each rColumn In rTarget.Columns
       For Each rCell In rColumn.Cells   ' группировать ячейки с одинаковыми значениями
          If rMerge Is Nothing Then
             Set rMerge = rCell
          Else
             If rMerge(1).Value = rCell.Value Then
                Set rMerge = Union(rMerge, rCell): rMerge.Merge
             Else
                Set rMerge = rCell
             End If
          End If
       Next
       Set rMerge = Nothing
    Next
    Application.ScreenUpdating = True: Application.DisplayAlerts = True
End Sub
[/vba]
Редко, но им пользуюсь. Сбоев, вроде, не даёт

Автор - Alex_ST
Дата добавления - 27.09.2013 в 13:19
Alex_ST Дата: Пятница, 27.09.2013, 13:21 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
А для последующей при нужде разгруппировки с заполнением ещё и такой запасён:[vba]
Код
Sub UnMerge_and_Fill_by_Value()   ' разгруппировать все ячейки в Selection и ячейки каждой бывшей группы заполнить значениями из их первых ячеек
    If TypeName(Selection) <> "Range" Then Exit Sub
    If Selection.Cells.Count <= 1 Then Exit Sub
    Dim rCell As Range, sAddress$   ', i&, sValue$
    Application.ScreenUpdating = False
    For Each rCell In Intersect(Selection, ActiveSheet.UsedRange).Cells
       If rCell.MergeCells Then
          sAddress = rCell.MergeArea.Address: rCell.UnMerge
          Range(sAddress).Value = rCell.Value
       End If
    Next
    Application.ScreenUpdating = True
End Sub
[/vba]



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеА для последующей при нужде разгруппировки с заполнением ещё и такой запасён:[vba]
Код
Sub UnMerge_and_Fill_by_Value()   ' разгруппировать все ячейки в Selection и ячейки каждой бывшей группы заполнить значениями из их первых ячеек
    If TypeName(Selection) <> "Range" Then Exit Sub
    If Selection.Cells.Count <= 1 Then Exit Sub
    Dim rCell As Range, sAddress$   ', i&, sValue$
    Application.ScreenUpdating = False
    For Each rCell In Intersect(Selection, ActiveSheet.UsedRange).Cells
       If rCell.MergeCells Then
          sAddress = rCell.MergeArea.Address: rCell.UnMerge
          Range(sAddress).Value = rCell.Value
       End If
    Next
    Application.ScreenUpdating = True
End Sub
[/vba]

Автор - Alex_ST
Дата добавления - 27.09.2013 в 13:21
Эмка Дата: Понедельник, 30.09.2013, 09:34 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 1 ±
Замечаний: 0% ±

Excel 2007
Ого как много! Спасибо вам всем )
 
Ответить
СообщениеОго как много! Спасибо вам всем )

Автор - Эмка
Дата добавления - 30.09.2013 в 09:34
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Объединение ячеек (Макросы Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!