Я предполагаю, что ваши имена файлов в столбце A , начиная с строки 1.
Если нет, внесите соответствующие корректировки в приведенный ниже.
Установите B1 в
=LEN(A1)-LEN(SUBSTITUTE(A1, "\", ""))
и перетащите / заполните его, чтобы покрыть все ваши данные.
SUBSTITUTE(A1, "\", "") заменяет все символы \ в вашем тексте ничем, поэтому C:\Question\General Information1 становится C:QuestionGeneral Information1 , которая, очевидно, имеет на два символа меньше.
Вычитание длины этой уменьшенной строки из исходного имени файла - хитрость для определения количества символов \ в ваших данных.
Установите C1 на
=IF($B1>=(COLUMN()-2), 1, "")
и перетащите / заполните вправо достаточно далеко, чтобы охватить максимальное количество уровней (т. е. количество символов \ ), которое вы ожидаете иметь в своих данных.
Если вы не знаете, просто перетащите его на Z1 ; что позволит 24 уровня (26-2).
Если вам нужно больше, внесите соответствующие изменения в следующем разделе.
COLUMN() возвращает номер текущего столбца (C равно 3, Z равно 26 и т.д.)
Так (COLUMN()-2) колеблется от 1 в столбце C до 24 в столбце Z Это генерирует числовой индекс первого имени файла в списке.
(Помните, что B1 содержит количество уровней каталогов.)
Формула оценивается как 1 в столбцах, чей относительный номер столбца (номер в диапазоне 1-24) равен ≤ количеству уровней каталога, и в противном случае пустым.
Таким образом, столбцы 1 и 2 (C и D) получают 1 , а остальные становятся пустыми:
C D E F ...
1 1
который мы в конечном итоге переведем в 1.1 .
Установите C2 в
=IF($B2>(COLUMN()-2), C1, IF($B2=(COLUMN()-2), SUM(C1,1), ""))
и перетащите / заполните вправо достаточно далеко, чтобы покрыть максимальное количество уровней (то есть, чтобы соответствовать строке 1); а затем перетащите / заполните его, чтобы охватить все ваши данные (т. е. чтобы соответствовать столбцу B).
Это предназначено для генерации номеров компонентов ваших номеров индекса; например, C2 = D2 = E2 = 1 , F2 … Z2 не заполнены для индекса 1.1.1 . Это говорит,
- Если номер уровня больше номера столбца, оставьте компонент индекса из предыдущей строки.
Например, поскольку все ваши 6-е и 7-е значения имеют как минимум три обратных слеша, столбцы
C , D и E имеют одинаковые значения (1 , 1 и 2) в строках 6 и 7.
- Если мы находимся в столбце, соответствующем номеру уровня, то здесь мы должны добавить его к компоненту индекса из предыдущей строки.
Например, поскольку ваши 3-е, 4-е и 5-е значения имеют четыре обратные косые черты, ячейки
F3 , F4 и F5 имеют последовательные значения 1 , 2 и 3 .
(Помните, что столбец F имеет относительный номер столбца четыре, так как мы вычитаем 2)
- Я использовал
SUM(C1,1) вместо C1+1 потому что SUM(C1,1) будет иметь значение 1 если C1 - пустая строка, тогда как C1+1 приведет к ошибке.
- В противном случае мы находимся в столбце за номером уровня, поэтому отображаем пустым.
Теперь установите AC1 на
=IF(C1="", "", C1&".")
Это просто говорит, что если в ячейке C1 есть индексный компонент, добавьте точку (« . »), В противном случае отобразите пустым.
Перетащите / заполните это вправо достаточно далеко, чтобы соответствовать столбцу C …, данные; например, до AZ1 . Установите AB1 в
=AC1&AD1&AE1&AF1&AG1&AH1&AI1&AJ1
также расширяя его по мере необходимости. (Да, это утомительно; к сожалению, Excel не достаточно умен для работы CONCATENATE(AC1:AZ1) .
К счастью, вам нужно сделать это только один раз.)
Это объединяет акцентированные компоненты индекса из столбцов AC ..., давая вам почти то, что вы хотите. Единственная проблема заключается в том, что, поскольку каждое из непустых значений AC - AZ заканчивается точкой, конкатенация также будет. Поэтому установите AA1 на
=LEFT(AB1, LEN(AB1)-1)
Это самая левая подстрока AB1 содержащая все символы, кроме последнего; т.е. удаляет последний период.
Перетащите столбцы AA - AZ вниз, чтобы покрыть данные. Это должно быть то, что вы хотите:
