Vamos percorrer o processo Avaliar juntos:
No meu exemplo, tenho o valor abf5fb6
na célula A2
, que é avaliado como 56
.
Primeiro passo, substitua A2
pelo valor em cell A2
Antes:
=SUM(MID(0&A2,LARGE(INDEX(ISNUMBER(--MID(A2,ROW($1:$99),1))*ROW($1:$99),),ROW($1:$99))+1,1)*10^ROW($1:$99)/10)
Depois:
=SUM(MID(0&"abf5fb6",LARGE(INDEX(ISNUMBER(--MID(A2,ROW($1:$99),1))*ROW($1:$99),),ROW($1:$99))+1,1)*10^ROW($1:$99)/10)
Observe como o texto agora está dentro de um par de aspas. Isso significa que é texto, também conhecido como string .
Agora é um bom momento para explicar brevemente a função MID
. Esta função simplesmente extrairá algum texto de uma string. O primeiro argumento é o texto, ou string, com o qual começaremos. O segundo argumento é a posição inicial de onde queremos começar a extrair. O terceiro argumento é o número de caracteres que queremos extrair ou o tamanho do nosso resultado final. Por exemplo, =MID("wizlog", 1, 3
retornará wiz
, enquanto =MID("wizlog", 2, 5)
retornará izlog
Assim, o próximo passo concatena o 0&"abf5fb6"
, porque como mencionado acima, o primeiro argumento na função MID
requer texto (novamente, chamado de string). Mas, para adicionar um número a uma string no Excel, use o símbolo &
.
Antes:
=SUM(MID(0&"abf5fb6",LARGE(INDEX(ISNUMBER(--MID(A2,ROW($1:$99),1))*ROW($1:$99),),ROW($1:$99))+1,1)*10^ROW($1:$99)/10)
Depois:
=SUM(MID("0abf5fb6",LARGE(INDEX(ISNUMBER(--MID(A2,ROW($1:$99),1))*ROW($1:$99),),ROW($1:$99))+1,1)*10^ROW($1:$99)/10)
Agora, vamos pular para a próxima função MID
para substituir o outro A2
por seu valor novamente, assim como antes.
Depois:
=SUM(MID("0abf5fb6",LARGE(INDEX(ISNUMBER(--MID("abf5fb6,ROW($1:$99),1))*ROW($1:$99),),ROW($1:$99))+1,1)*10^ROW($1:$99)/10)
Em seguida, estamos lidando com o segundo argumento na segunda função MID
, ROW($1:$99)
. Lembre-se, o segundo argumento na função MID
nos fornece a posição inicial. A função ROW
, por outro lado, simplesmente retorna a linha que é dada, então, uma vez que passamos o intervalo de 1 a 99, ela retornará para nós uma matriz, ou uma lista, de 1 a 99. Isso significa que planejamos usar a função MID
99 vezes, cada vez iniciando em uma posição diferente de 1 a 99.
Antes:
=SUM(MID("0abf5fb6",LARGE(INDEX(ISNUMBER(--MID("abf5fb6",ROW($1:$99),1))*ROW($1:$99),),ROW($1:$99))+1,1)*10^ROW($1:$99)/10)
Depois:
=SUM(MID("0abf5fb6",LARGE(INDEX(ISNUMBER(--MID("abf5fb6",{1;2;3;...;99},1))*ROW($1:$99),),ROW($1:$99))+1,1)*10^ROW($1:$99)/10)
(Para economizar espaço, eu não digitei todos os números de 1 a 99, mas tenho certeza que você entendeu.)
Agora que temos todas as peças para a segunda função MID
, podemos calcular essa parte.
Antes:
=SUM(MID("0abf5fb6",LARGE(INDEX(ISNUMBER(--MID("abf5fb6",{1;2;3;...;99},1))*ROW($1:$99),),ROW($1:$99))+1,1)*10^ROW($1:$99)/10)
Depois:
=SUM(MID("0abf5fb6",LARGE(INDEX(ISNUMBER(--{"a";"b";"f";"5";"f";"b";"6";"";"";"";...;""})*ROW($1:$99),),ROW($1:$99))+1,1)*10^ROW($1:$99)/10)
Então, o que aconteceu aqui? Bem, a função MID
apenas retorna uma substring da string dada, começando no local dado, para o número especificado de caracteres. Então, nós demos a ela a string, abf5fb6
, atribuímos uma matriz de posições iniciais, especificando que só queremos extrair 1 caractere. Assim, a função retorna para nós uma matriz de cada caractere em nossa string, de 1-99. Como a string inicial tinha apenas 7 caracteres, as posições 8-99 estão vazias, e por isso temos todas as subseqüências vazias depois, ( "";"";"";...;"";
).
A próxima função a ser calculada é a função ISNUMBER
, mas primeiro vamos examinar um recurso estranho que fazemos primeiro. Observe como há um duplo negativo na frente de nossa nova matriz. Enquanto um único sinal de menos inverterá o resultado de um resultado (se TRUE
retornar FALSE
e visa-vera), mas um duplo menos significa forçar a resposta da string em um número. Normalmente, isso resultará nas respostas de TRUE
para transformar em 1
e FALSE
para se transformar em 0
, mas, nesse caso, estamos convertendo cada caractere em nossa matriz em um número. Assim, entrar em --"a"
resultará em #VALUE!
, enquanto a entrada em --"5"
resultará em 5
.
Assim, quando executamos a função ISNUMBER
:
=SUM(MID("0abf5fb6",LARGE(INDEX(ISNUMBER(--{"a"; "b"; "f"; "5"; "f"; "b"; "6"; ""; ""; ""; ...; ""})*ROW($1:$99),),ROW($1:$99))+1,1)*10^ROW($1:$99)/10)
O que estamos realmente executando nos bastidores é:
=SUM(MID("0abf5fb6",LARGE(INDEX(ISNUMBER({#VALUE!; #VALUE!; #VALUE!; 5; #VALUE!; #VALUE!; 6; #VALUE!; #VALUE!; #VALUE!; ...; #VALUE!})*ROW($1:$99),),ROW($1:$99))+1,1)*10^ROW($1:$99)/10)
Como resultado, ele transforma uma matriz de TRUE
ou FALSE
indicando se o valor era um número ou não. Daí nós temos:
=SUM(MID("0abf5fb6",LARGE(INDEX({FALSE; FALSE; FALSE; TRUE; FALSE; FALSE; TRUE; FALSE; FALSE; ...; FALSE})*ROW($1:$99),),ROW($1:$99))+1,1)*10^ROW($1:$99)/10)
Acabou o tempo Bem, eu estou no trabalho fazendo o que eu não deveria estar fazendo, e isso foi tanto quanto eu cheguei antes de eu realmente fazer algo produtivo hoje. Espero retomar de onde parei mais tarde.