Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме 15-35 тыс рублей в месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2009, 19:31   #1
eto
Пользователь
 
Регистрация: 24.02.2009
Сообщений: 29
По умолчанию как превратить "визуальную" иерархию в 1 столбце в "реальную" в нескольких

ничего лучше с темой не придумалось ))
Дано:
в исходной таблице в одном стобце расположены данные Организация/подразделение/должность/фио
Иерархия выделена визуально (отступы) и группировкой
Нужно:
Что-то сделать с этой таблицей чтобы эти данные были в отдельных столбцах, а строки остались только соответствующие ФИО.
Для того, чтобы потом можно было сводную делать.

Пока не представляю как подступиться, а строк в оригинальной таблице будет несколько тысяч - многовато, чтобы руками это делать.

Пример в приложении.
Вложения
Тип файла: rar Пример.rar (5.3 Кб, 21 просмотров)
eto вне форума Ответить с цитированием
Старый 11.03.2009, 22:50   #2
IgorGO
МегаМодератор
СуперМодератор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

очень примитивная и костная иерархия. в учебных целях - куда ни шло, но если так описана реальная структура организации... как по мне, то это печально. жмите кнопку, смотрите результаты на новом листе
Вложения
Тип файла: rar Пример10.rar (12.6 Кб, 24 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 12.03.2009, 11:16   #3
eto
Пользователь
 
Регистрация: 24.02.2009
Сообщений: 29
По умолчанию

это сруктура реальной выгрузки из ЗУПа и пока иначе настроить отчет нельзя м.б. к следующему месяцу что-нибудь придумаем, а пока приходится работать с тем, что есть

спасибо за макрос, вроде бы всё как нужно работает
но как он это делает я так до конца и не поняла, если Вам не сложно - прокомметируйте, пожалуйста, код, для общего развития страждущих
eto вне форума Ответить с цитированием
Старый 12.03.2009, 12:47   #4
IgorGO
МегаМодератор
СуперМодератор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

1. Sub MakeSructure()
2. Dim Ash As Integer, r2 As Integer, c As Integer
3. Dim stru(3) As String, cl As Range
4. Ash = ActiveSheet.Index
5. Sheets.Add After:=ActiveSheet
6. Sheets(Ash).Activate
7. r2 = 1
8. With Sheets(Ash + 1)
9. For Each cl In Range(Cells(5, 1), Cells(5, 1).End(xlDown))
10. If cl.IndentLevel < cl.Offset(1).IndentLevel Then
11. stru(cl.IndentLevel / 2 + 1) = cl.Value
12. Else
13. r2 = r2 + 1
14. For c = 1 To 3
15. .Cells(r2, c) = stru(c)
16. Next
17. .Cells(r2, 4) = cl.Value
18. For c = 2 To 7
19. .Cells(r2, c + 3) = Cells(cl.Row, c)
20. Next
21. End If
22. Next
23. End With
24. End Sub
Поставил номера к строка для предметности разговора. убрал одно обьявление и один оператор (за ненадобностью)
начну комментарии с 9 строки.

9. организовываем цикл по всем ячейкам 1-й колонки, начиная со строки 5 до последней непустой в данной колонке, cl - рассматриваемая в каждом шаге цикла ячека.

10.определяем тут записан элемент организационной структуры предприятия или фамилия сотрудника. определяем по количеству отсупов в ячейках. Исходил из такой логики: подразделение без сотрудников - нонсенс. Поэтому если отступов у текущей ячейки меньше, чем у следующей - значит это название подразделения.

11.имя подразделения заносится в массив stru на свой уровень (1, 2 или 3), в зависимости от количества отступов в ячейке. (визуальный анализ показал, что отступов бывает 0, 2, 4, 8)

13. это работник. начинаем запись его данных на 2-й лист в новую строку

14-16.записываем подразделения, к которым он относится.

17.записываем ФИО сотрудника

18-20.переписываем данные о нем на второй лист
все.

самая умная строка здесь - это строка 10. которая принимает решение - это сотрудник или элемент структуры.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 12.03.2009, 13:55   #5
eto
Пользователь
 
Регистрация: 24.02.2009
Сообщений: 29
По умолчанию

спасибо, буду разбираться
eto вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
блок "cont" с права не принимает значение "margin: 10px;" которое описано в body tabikA HTML и CSS 5 24.02.2009 21:50
C++, препроцессор, как из "int" сделать "char"? Максай Помощь студентам 3 05.09.2008 08:16
сделать окно "открыть","сохранить как" blackstersl Общие вопросы Delphi 1 24.08.2008 10:31
Создаю диаграмму "Bar". Подскажите как убрать растояние между "столбами" MAcK Компоненты Delphi 11 24.10.2007 10:49
Перечисление в столбце. Как "вытащить" нужное? Помогите! Tatyana БД в Delphi 2 10.07.2007 09:25