Страницы: 1
RSS
Создание многоуровневого списка, Создание многоуровневого списка по уровню списка в соседней ячейке с подсчетом вхождений
 
Добрый день!
Вроде все просто, но как-то затормозил... :(
Никак не могу создать с помощью формул многоуровневый список по аналогу Ворда.
Есть штатное расписание предприятия - довольно объемное и периодически начальство вносит в него изменения. Всего получается 5 уровней до должности работника.
Нужно пронумеровать подразделения (цех, отдел, группа, участок, работник) многоуровневым списком 1 - 1.1 - 1.1.1 - 1.1.1.1 - 1.1.1.1.1 (столбец B) и подсчитать количество персонала в подразделении (столбец Е).
Причем, список получается не сплошной (например, 1.1, 1.1.1, 1.1.1.1 нет - сразу 1.2)
 
Цитата
sveta-sasha-21 написал:
Вроде все просто,
когда в данных нет логики - все далеко не просто, поэтому не вижу ничего удивительного, что ничего не получается
хотя... может логика и есть, но я не не увидел((
Изменено: Ігор Гончаренко - 21.05.2022 13:26:37
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Логика проста. Уровень один - 1. Уровень два - 1.1. Уровень три - 1.1.1  и т.д. Просто не во всех уровнях у подразделений есть названия поэтому они пропущены (например, нет подразделения 1.1, а можно было бы вставить - пусть дирекция). А уровень 5 - это должности работников.
Изменено: sveta-sasha-21 - 21.05.2022 17:38:32
 
этот
Код
Private Sub Worksheet_Change(ByVal rg As Range)
  Dim a, i&, m, n, p&, r&, re, tm, v
  If Intersect(rg, Columns(3)) Is Nothing Then Exit Sub
  If rg.Count > 1 Then Exit Sub
  If rg.Row = 1 Then Exit Sub
  a = Intersect(Me.UsedRange, Range("B:C")): r = rg.Row
  For r = rg.Row To UBound(a)
    If IsEmpty(a(r, 2)) Then Exit For
    v = a(r - 1, 1) & ".": i = 0
    ReDim n(1 To 1): p = InStr(v, ".")
    Do While p > 0
      i = i + 1: ReDim Preserve n(1 To i)
      n(i) = Val(Left(v, p - 1))
      v = Right(v, Len(v) - p): p = InStr(v, ".")
    Loop
    a(r, 1) = ""
    For i = 1 To a(r, 2) - 1
      If i <= UBound(n) Then a(r, 1) = a(r, 1) & "." & n(i) _
                        Else a(r, 1) = a(r, 1) & ".1"
    Next
    If a(r, 1) <> "" Then a(r, 1) = Right(a(r, 1), Len(a(r, 1)) - 1) & "."
    If a(r, 2) <= UBound(n) Then a(r, 1) = a(r, 1) & n(i) + 1 _
                            Else a(r, 1) = a(r, 1) & 1
  Next
  [b1].Resize(UBound(a), UBound(a, 2)) = a
End Sub

в модуль листа
можете удалить №№ с В3 до конца столбца
поставьте курсов в С5, нажмите Enter
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Спасибо, но хотелось бы формулами. Начальство с макросами не дружит...  :(  
 
господа задача следующая;
исходные (см. файл из стартового сообщения)
а колонке С написан Уровень
в колонку В нужно написать формулу, которая вернет многоуровневый №
в исходном файле колонка заполнена значениями:
1
1.1.1.1.1
1.1.1.1.2
...
1.1.1.1.11
1.2
....
нужно чтобы вместо написанных руками значений то же самое написала формула
мой макрос из сообщения 2 заполняет колонку В теми же значениями, но нужна формула))
всем удачи!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
в колонку С пишете уровни
в колонку В для первого указанного уровня руками пишете его № (в вашем  файле в В2 пишите 1)
в В3 формула
Код
=ЕСЛИ(У1>У0;Н0 & ПОВТОР(".1";У1-У0);До & ЕСЛИ(До="";"";".") & Нм)

и тянете вниз
в файле эта формула написана в Н3 и потянута до Н80. в Н2 руками написано 1 с этого числа стартует вся нумерация)
Изменено: Ігор Гончаренко - 24.05.2022 09:48:20
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
К сожалению, формула не работает начиная с 4-го уровня - строка 49 - там д.б. "2.2.2.2.", а формула дает "2.2.2.2.3" и т.д.

Не очень понял, как работает данная формула. Наверное, "У0" и "У1" - это "С2" и "С3". А вот что такое "До" и "Нм" не пойму. Поясните, плз. :)  
 
к счастью, можно исправить
пролистывал не заметил что есть ошибки по средине списка
До, Мн и прочее см. в Диспетчере имен
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Большое человеческое спасибо
 
Цитата
sveta-sasha-21 написал:
Начальство с макросами не дружит...
это фигня, беда в том, что оно ничего не поймет и в моих формулах(((
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Добрый день!
А можно каким-то образом данную формулу дописать для получения идентификаторов вида:
06.1
06.1.0001
06.1.0001.01
06.1.0001.01.01
06.1.0001.01.02
06.2.0001
06.2.0002
И так далее.
Изменено: GorAnt - 24.01.2023 11:48:39
Страницы: 1
Наверх