Suponho que seus nomes de arquivos estejam na coluna A , começando na linha 1.
Se não, faça os ajustes apropriados abaixo.
Defina B1 para
=LEN(A1)-LEN(SUBSTITUTE(A1, "\", ""))
e arraste / preencha para cobrir todos os seus dados.
SUBSTITUTE(A1, "\", "") substitui todos os caracteres \ no seu texto
com nada,
então C:\Question\General Information1 se torna C:QuestionGeneral Information1 ,
que, obviamente, tem dois caracteres a menos.
Subtraindo o comprimento dessa string reduzida do nome do arquivo original
é um truque para determinar o número de \ caracteres em seus dados.
Defina C1 para
=IF($B1>=(COLUMN()-2), 1, "")
e arraste / preencha para a direita o suficiente para cobrir o número máximo de níveis
(ex., número de \ caracteres) que você espera ter em seus dados.
Se você não sabe, basta arrastá-lo para Z1 ; Isso permitirá 24 níveis (26−2).
Se você precisar de mais do que isso,
faça os ajustes apropriados para a próxima seção.
COLUMN() retorna o número da coluna atual
( C é 3, Z é 26, etc.)
Portanto, (COLUMN()-2) varia de 1 na coluna C a 24 na coluna Z .
Isso gera o índice numérico do primeiro nome de arquivo na lista.
(Lembre-se, B1 contém o número de níveis de diretório.)
A fórmula é avaliada como 1 nas colunas cujo número de coluna relativo
(aquele no intervalo 1-24) é ≤ o número de níveis de diretório,
e em branco caso contrário.
Assim, as colunas 1 e 2 ( C e D ) recebem 1 e o restante fica em branco:
C D E F ...
1 1
que eventualmente traduziremos em 1.1 .
Defina C2 para
=IF($B2>(COLUMN()-2), C1, IF($B2=(COLUMN()-2), SUM(C1,1), ""))
e arraste / preencha para a direita o suficiente para cobrir o número máximo de níveis
(isto é, para coincidir com a linha 1);
e depois arraste / preencha isso para cobrir todos os seus dados
(isto é, para corresponder à coluna B ).
Isto destina-se a gerar os números dos componentes dos seus números de índice;
por exemplo, C2 = D2 = E2 = 1 , F2 … Z2 estão em branco,
para um índice de 1.1.1 . Diz,
- Se o número do nível for maior que o número da coluna,
mantenha o componente de índice da linha anterior.
Por exemplo, desde que seus 6º e 7º valores tenham pelo menos três barras invertidas,
As colunas
C,DeEtêm os mesmos valores (1,1e2) nas linhas 6 e 7. - Se estivermos na coluna correspondente ao número do nível,
é aqui que precisamos adicionar um ao componente de índice da linha anterior.
Por exemplo, como seus valores 3, 4 e 5 têm quatro barras invertidas,
as células
F3,F4eF5têm os valores sequenciais1,2e3. (Lembre-se que ColunaFtem um número de coluna relativo de quatro, já que estamos subtraindo2.)- usei
SUM(C1,1)em vez deC1+1porqueSUM(C1,1)será avaliado como1seC1for uma string em branco, Considerando queC1+1resultará em um erro.
- usei
- Caso contrário, estamos na coluna além do número do nível, portanto, exibir em branco.
Agora, defina AC1 para
=IF(C1="", "", C1&".")
Isso simplesmente diz que, se a célula C1 tiver um componente de índice,
acrescente um período (“ . ”), caso contrário, exibir em branco.
Arraste / preencha isso para a direita o suficiente para corresponder à coluna C …, data;
por exemplo, para AZ1 . Defina AB1 para
=AC1&AD1&AE1&AF1&AG1&AH1&AI1&AJ1
também estendendo-o até onde for necessário. (Sim, isso é tedioso;
infelizmente, o Excel não é inteligente o suficiente para que CONCATENATE(AC1:AZ1) funcione.
Felizmente, você precisa fazer isso apenas uma vez.)
Isso concatena os componentes de índice pontuados das Colunas AC …,
dando a você quase o que você quer. O único problema é que
uma vez que cada um dos valores não em branco AC - AZ termina com um período,
a concatenação será também. Então, defina AA1 para
=LEFT(AB1, LEN(AB1)-1)
Esta é a substring mais à esquerda de AB1 contendo todos menos o último caractere;
isto é, remove o período final.
Arraste Colunas AA - AZ para baixo para cobrir os dados. Isso deve ser o que você quer: