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

Вход

Регистрация

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

 

= Мир MS Excel/Перебрать сгруппированные ячейки и разгруппировать их - Страница 2 - Мир MS Excel

Старая форма входа
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Перебрать сгруппированные ячейки и разгруппировать их (Борюсь со "злом"... Настиг затык :))
Перебрать сгруппированные ячейки и разгруппировать их
KuklP Дата: Среда, 31.10.2012, 16:56 | Сообщение № 21
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Quote (nerv)
по задаче: только собирать в массив/коллекцию и проверять
Что и сделал Саша в Сообщение № 12.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
Сообщение
Quote (nerv)
по задаче: только собирать в массив/коллекцию и проверять
Что и сделал Саша в Сообщение № 12.

Автор - KuklP
Дата добавления - 31.10.2012 в 16:56
Alex_ST Дата: Среда, 31.10.2012, 17:05 | Сообщение № 22
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Quote (nerv)
все нормально, можешь проверить
Да, проверил и подправил тот пост. Я просто rCell.Cells(1) вместо rCell.MergeArea.Cells(1) писАл cry
Quote (nerv)
только собирать в массив/коллекцию и проверять
не красиво это... Я лучше на ус себе намотаю это ограничение.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщение
Quote (nerv)
все нормально, можешь проверить
Да, проверил и подправил тот пост. Я просто rCell.Cells(1) вместо rCell.MergeArea.Cells(1) писАл cry
Quote (nerv)
только собирать в массив/коллекцию и проверять
не красиво это... Я лучше на ус себе намотаю это ограничение.

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

2003
К стати, если писАть не Selection а ActiveWindow.RangeSelection, то проверку типа Selection на Range можно будет убрать.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеК стати, если писАть не Selection а ActiveWindow.RangeSelection, то проверку типа Selection на Range можно будет убрать.

Автор - Alex_ST
Дата добавления - 31.10.2012 в 17:17
SM Дата: Среда, 31.10.2012, 18:38 | Сообщение № 24
Группа: Друзья
Ранг: Участник
Сообщений: 64
Репутация: 59 ±
Замечаний: 0% ±

2003
Кстати, о пользе коллекционирования:
К сообщению приложен файл: UnoMomento.xls (43.0 Kb)


Excel изощрён, но не злонамерен
 
Ответить
СообщениеКстати, о пользе коллекционирования:

Автор - SM
Дата добавления - 31.10.2012 в 18:38
nilem Дата: Среда, 31.10.2012, 20:42 | Сообщение № 25
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
в продолжение коллекционирования - словаризация smile
[vba]
Code
Sub ert()
Dim r As Range, adr$, s$
With CreateObject("Scripting.Dictionary")
     For Each r In Intersect(Selection, ActiveSheet.UsedRange)
         If r.MergeCells Then
             adr = r.MergeArea.Address
             If Not .Exists(adr) Then .Item(adr) = 1: s = s & "," & adr
         End If
     Next
End With: If s = vbNullString Then Exit Sub
For Each r In Range(Mid(s, 2)).Areas
     r.Select
     If MsgBox("Разгруппировать ячейку " & r.Address(0, 0) & " ?", 36, _
               "Найдена объединённая ячейка") = vbYes Then r.UnMerge
Next r
End Sub
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениев продолжение коллекционирования - словаризация smile
[vba]
Code
Sub ert()
Dim r As Range, adr$, s$
With CreateObject("Scripting.Dictionary")
     For Each r In Intersect(Selection, ActiveSheet.UsedRange)
         If r.MergeCells Then
             adr = r.MergeArea.Address
             If Not .Exists(adr) Then .Item(adr) = 1: s = s & "," & adr
         End If
     Next
End With: If s = vbNullString Then Exit Sub
For Each r In Range(Mid(s, 2)).Areas
     r.Select
     If MsgBox("Разгруппировать ячейку " & r.Address(0, 0) & " ?", 36, _
               "Найдена объединённая ячейка") = vbYes Then r.UnMerge
Next r
End Sub
[/vba]

Автор - nilem
Дата добавления - 31.10.2012 в 20:42
Alex_ST Дата: Среда, 31.10.2012, 20:57 | Сообщение № 26
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Николай,
словари - мои любимые объекты. Собирался сегодня вечером-завтра утром попробовать их присобачить... А тут ты раньше меня успел cry
Но всё равно свой вариант сделаю (я предпочитаю, например, неявное добавление в словарь без использования .Exists )



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеНиколай,
словари - мои любимые объекты. Собирался сегодня вечером-завтра утром попробовать их присобачить... А тут ты раньше меня успел cry
Но всё равно свой вариант сделаю (я предпочитаю, например, неявное добавление в словарь без использования .Exists )

Автор - Alex_ST
Дата добавления - 31.10.2012 в 20:57
nerv Дата: Четверг, 01.11.2012, 01:22 | Сообщение № 27
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

до кучи
[vba]
Code
Sub UnMerge()
     Dim area As Range
     Dim cell As Range
     Dim usedRange As Range
     Dim cellAddress As String
     Dim mergeCells As New Collection
      
     Set usedRange = Intersect(ActiveWindow.RangeSelection, ActiveSheet.usedRange)
     If usedRange Is Nothing Then Exit Sub
      
     For Each area In usedRange.Areas
         For Each cell In area
             If cell.mergeCells Then
                 cellAddress = cell.MergeArea.Cells(1).address
                 If Not InCollection(mergeCells, cellAddress) Then
                     If MsgBox(cell.address, vbYesNo + vbDefaultButton2, "Unmerge?") = vbYes Then
                         cell.UnMerge
                     Else
                         mergeCells.Add cellAddress, cellAddress
                     End If
                 End If
             End If
         Next
     Next
End Sub

Private Function InCollection(ByRef col As Collection, _
                    ByRef address As String) As Boolean
     On Error Resume Next
     InCollection = Not IsEmpty(col.Item(address))
End Function
[/vba]


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
Сообщениедо кучи
[vba]
Code
Sub UnMerge()
     Dim area As Range
     Dim cell As Range
     Dim usedRange As Range
     Dim cellAddress As String
     Dim mergeCells As New Collection
      
     Set usedRange = Intersect(ActiveWindow.RangeSelection, ActiveSheet.usedRange)
     If usedRange Is Nothing Then Exit Sub
      
     For Each area In usedRange.Areas
         For Each cell In area
             If cell.mergeCells Then
                 cellAddress = cell.MergeArea.Cells(1).address
                 If Not InCollection(mergeCells, cellAddress) Then
                     If MsgBox(cell.address, vbYesNo + vbDefaultButton2, "Unmerge?") = vbYes Then
                         cell.UnMerge
                     Else
                         mergeCells.Add cellAddress, cellAddress
                     End If
                 End If
             End If
         Next
     Next
End Sub

Private Function InCollection(ByRef col As Collection, _
                    ByRef address As String) As Boolean
     On Error Resume Next
     InCollection = Not IsEmpty(col.Item(address))
End Function
[/vba]

Автор - nerv
Дата добавления - 01.11.2012 в 01:22
Alex_ST Дата: Четверг, 22.11.2012, 15:16 | Сообщение № 28
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Упс!
Совсем забыл про то, что хотел доделать этот макрос confused
Сейчас за обеденным бутербродом случайно наткнулся у себя в макросах и подпилил.
В самом деле, пришлось использовать словари чтобы запомнить все объединённые ячейки, попадающие в выделение и избежать повторов.



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Четверг, 22.11.2012, 15:19
 
Ответить
СообщениеУпс!
Совсем забыл про то, что хотел доделать этот макрос confused
Сейчас за обеденным бутербродом случайно наткнулся у себя в макросах и подпилил.
В самом деле, пришлось использовать словари чтобы запомнить все объединённые ячейки, попадающие в выделение и избежать повторов.

Автор - Alex_ST
Дата добавления - 22.11.2012 в 15:16
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Перебрать сгруппированные ячейки и разгруппировать их (Борюсь со "злом"... Настиг затык :))
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

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