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
,D
eE
têm os mesmos valores (1
,1
e2
) 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
,F4
eF5
têm os valores sequenciais1
,2
e3
. (Lembre-se que ColunaF
tem um número de coluna relativo de quatro, já que estamos subtraindo2
.)- usei
SUM(C1,1)
em vez deC1+1
porqueSUM(C1,1)
será avaliado como1
seC1
for uma string em branco, Considerando queC1+1
resultará 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: