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

Вход

Регистрация

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

 

= Мир MS Excel/группировка строк - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » группировка строк (Макросы/Sub)
группировка строк
Trojan_exe Дата: Четверг, 26.06.2014, 10:19 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Всем привет. Есть неоднородныйтелефонный справочник, где расписаны сотрудники. Задача - сгруппировать строки в отдельные группы (управлений и дирекций). Слова "дирекция" и "управление" встречаются в разном контексте, поэтому обрабатывать нужно только выделенный диапазон.
Алгоритм - два цикла поиска по ключевым словам "дирекция"\ "управление" и группировка содержимого. одно управление - одна группа, и все эти группы потом группируются в дирекции.
Макрос выкидывает с ошибкой Run-time error 1004 . Application-defined or object-defined error. Чего не хватает ?


[vba]
Код
Option Explicit
Sub grupping()
                  Dim ra As Range, cell As Range
              Dim pos_dir(100) As Integer
              Dim pos_upr(500) As Integer
              Dim i, j As Integer
              Set ra = Selection
                        
              For Each cell In ra.Cells
                  If cell.Value Like "Дирекция" Then
                      pos_dir(cell) = cell.Row
                  End If
                  If cell.Value Like "Управление" Then
                      If pos_upr(cell) < pos_dir(cell) Then
                          pos_upr(cell) = cell.Row
                      End If
                  End If
              Next cell
                        
              i = 1
              j = 1
              While i < UBound(pos_dir)
                  Range(Cells(pos_dir(i), 1), Cells(pos_dir(i + 1) - 1, 10)).Select
                  Selection.Rows.Group
                  While j < UBound(pos_upr)
                      Range(Cells(pos_upr(j), 1), Cells(pos_upr(j + 1) - 1, 10)).Select
                      Selection.Rows.Group
                      j = j + 1
                  Wend
                  i = i + 1
              Wend
End Sub
[/vba]
К сообщению приложен файл: 0299987.xlsm (17.7 Kb)


Сообщение отредактировал Trojan_exe - Четверг, 26.06.2014, 11:12
 
Ответить
СообщениеВсем привет. Есть неоднородныйтелефонный справочник, где расписаны сотрудники. Задача - сгруппировать строки в отдельные группы (управлений и дирекций). Слова "дирекция" и "управление" встречаются в разном контексте, поэтому обрабатывать нужно только выделенный диапазон.
Алгоритм - два цикла поиска по ключевым словам "дирекция"\ "управление" и группировка содержимого. одно управление - одна группа, и все эти группы потом группируются в дирекции.
Макрос выкидывает с ошибкой Run-time error 1004 . Application-defined or object-defined error. Чего не хватает ?


[vba]
Код
Option Explicit
Sub grupping()
                  Dim ra As Range, cell As Range
              Dim pos_dir(100) As Integer
              Dim pos_upr(500) As Integer
              Dim i, j As Integer
              Set ra = Selection
                        
              For Each cell In ra.Cells
                  If cell.Value Like "Дирекция" Then
                      pos_dir(cell) = cell.Row
                  End If
                  If cell.Value Like "Управление" Then
                      If pos_upr(cell) < pos_dir(cell) Then
                          pos_upr(cell) = cell.Row
                      End If
                  End If
              Next cell
                        
              i = 1
              j = 1
              While i < UBound(pos_dir)
                  Range(Cells(pos_dir(i), 1), Cells(pos_dir(i + 1) - 1, 10)).Select
                  Selection.Rows.Group
                  While j < UBound(pos_upr)
                      Range(Cells(pos_upr(j), 1), Cells(pos_upr(j + 1) - 1, 10)).Select
                      Selection.Rows.Group
                      j = j + 1
                  Wend
                  i = i + 1
              Wend
End Sub
[/vba]

Автор - Trojan_exe
Дата добавления - 26.06.2014 в 10:19
ikki Дата: Четверг, 26.06.2014, 10:46 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
Чего не хватает ?
собственно Вашего макроса в xlsx-файле :)

вариант:
[vba]
Код
Sub test()
     With ActiveSheet
         .Outline.SummaryRow = xlAbove
         lr = .Cells(.Rows.Count, 3).End(xlUp).Row
         For i = 1 To lr
             If .Cells(i, 1) Like "Дирекция*" Then
                 .Rows(i).OutlineLevel = 1
             ElseIf .Cells(i, 2) Like "Управление*" Then
                 .Rows(i).OutlineLevel = 2
             Else
                 .Rows(i).OutlineLevel = 3
             End If
         Next
     End With
End Sub
[/vba]


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщение
Чего не хватает ?
собственно Вашего макроса в xlsx-файле :)

вариант:
[vba]
Код
Sub test()
     With ActiveSheet
         .Outline.SummaryRow = xlAbove
         lr = .Cells(.Rows.Count, 3).End(xlUp).Row
         For i = 1 To lr
             If .Cells(i, 1) Like "Дирекция*" Then
                 .Rows(i).OutlineLevel = 1
             ElseIf .Cells(i, 2) Like "Управление*" Then
                 .Rows(i).OutlineLevel = 2
             Else
                 .Rows(i).OutlineLevel = 3
             End If
         Next
     End With
End Sub
[/vba]

Автор - ikki
Дата добавления - 26.06.2014 в 10:46
Trojan_exe Дата: Четверг, 26.06.2014, 10:54 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
вместо "With ActiveSheet" я могу подставить "With Selection" ? лопатить нужно не полностью весь лист
 
Ответить
Сообщениевместо "With ActiveSheet" я могу подставить "With Selection" ? лопатить нужно не полностью весь лист

Автор - Trojan_exe
Дата добавления - 26.06.2014 в 10:54
ikki Дата: Четверг, 26.06.2014, 11:06 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
и сейчас "лопатится" не весь лист.
с первой по последнюю заполненную в третьем столбце.
или у Вас после структуры на листе есть что-то ещё?


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщениеи сейчас "лопатится" не весь лист.
с первой по последнюю заполненную в третьем столбце.
или у Вас после структуры на листе есть что-то ещё?

Автор - ikki
Дата добавления - 26.06.2014 в 11:06
Trojan_exe Дата: Четверг, 26.06.2014, 11:09 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
именно, есть и до, и после, там другая структура и слова "управление", "дирекция" встречаются в тех же ячейках, но в другом контексте, что собственно и не нужно группировать.
 
Ответить
Сообщениеименно, есть и до, и после, там другая структура и слова "управление", "дирекция" встречаются в тех же ячейках, но в другом контексте, что собственно и не нужно группировать.

Автор - Trojan_exe
Дата добавления - 26.06.2014 в 11:09
ikki Дата: Четверг, 26.06.2014, 11:18 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
тогда уберите совсем эту строку: [vba]
Код
lr = .Cells(.Rows.Count, 3).End(xlUp).Row
[/vba]
а эту [vba]
Код
For i = 1 To lr
[/vba] замените на [vba]
Код
For i = Selection.Row To Selection.Rows.Count + Selection.Row - 1
[/vba]


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщениетогда уберите совсем эту строку: [vba]
Код
lr = .Cells(.Rows.Count, 3).End(xlUp).Row
[/vba]
а эту [vba]
Код
For i = 1 To lr
[/vba] замените на [vba]
Код
For i = Selection.Row To Selection.Rows.Count + Selection.Row - 1
[/vba]

Автор - ikki
Дата добавления - 26.06.2014 в 11:18
Trojan_exe Дата: Четверг, 26.06.2014, 13:03 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Благодарю, ikki ! Все как требуется ! Спасибо !
 
Ответить
СообщениеБлагодарю, ikki ! Все как требуется ! Спасибо !

Автор - Trojan_exe
Дата добавления - 26.06.2014 в 13:03
Мир MS Excel » Вопросы и решения » Вопросы по VBA » группировка строк (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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