Normalmente, isso pode ser resolvido usando a função DATEVALUE para converter uma data que é texto em um valor de data do Excel (ou seja, um número que o Excel reconhecerá como data). O uso seria DATEVALUE (date_string ou cell_address).
No entanto, isso não funcionará aqui porque 1) Dia precede Mês em suas sequências de caracteres de exemplo e DATEVALUE espera Mês seguido por Dia e 2) para algumas das seqüências de data em que um horário também é incluído.
Aqui está uma alternativa de fórmula de matriz que funciona com os exemplos que você forneceu. Ele precisaria ser inserido usando a combinação de teclas Controle - Shift - Enter .
=DATE(
RIGHT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),MATCH("/",MID(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),LEN(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-ROW(1:25),1),0)),
LEFT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),SEARCH("/",IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-1),
LEN(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-MATCH("/",MID(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),LEN(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-ROW(1:25),1),0)-LEN(LEFT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),SEARCH("/",IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))+1)))
)
Essa fórmula de matriz muito complicada (espero que alguém possa oferecer uma mais simples) usa a função DATE para construir um valor de data do Excel. (Aconteceu que eu tenho a string de data original na célula F8 quando construí a data.)
A string de data que precisa ser convertida não pode ser usada em sua forma bruta porque às vezes inclui um horário. O que é usado em vez disso é RIGHT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8)
. Essa fórmula procura por um espaço na seqüência de data. Se encontrar um espaço, ele usa a função LEFT para obter todos os caracteres à esquerda do espaço; se não encontrar um espaço, simplesmente retorna a string original.
A parte mais externa da fórmula é a função DATE: quando recebe o ano, mês e dia, produz uma data do Excel. Eu quebrei o cálculo dessas três partes no código acima.
O cálculo do ano é o seguinte:
- Inverte a string de data (com o tempo cortado como explicado acima).
- Encontre a posição do primeiro "/" nesta string invertida usando a função SEARCH (Esta barra é na verdade a primeira barra na string de data não revertida.)
- Leve muitos caracteres à direita da string de data com a função RIGHT.
O cálculo do mês tem os passos:
- Encontre a posição da primeira barra na sequência de datas não revisto .
- Determine o número de caracteres no mês (que pode ser 1 ou 2) calculando a diferença entre essa posição e a posição do segundo "/", conforme determinado no cálculo do ano.
- Use a função MID para retornar os caracteres entre a primeira barra e a segunda barra.
O cálculo do dia é o mais simples.
- Calcule a posição do primeiro "/" usando o mesmo método do cálculo do mês.
- Use vários caracteres (menos 1) do lado esquerdo da string usando a função LEFT.
Existem maneiras menos elaboradas de obter o resultado, sendo que o mais simples seria, sem dúvida, o uso do comando Texto para Colunas na guia Dados da Faixa de Opções, conforme sugerido por @Barry.
Outra maneira de proceder é usar uma função de correspondência de padrões REGEX. Essa função não é construída no Excel, mas pode ser construída e acessada com o código VBA. Embora o código seja um pouco complicado, várias versões estão disponíveis na rede (como este exemplo ). No entanto, usar a função seria muito simples. Por exemplo, a expressão de correspondência para obter o dia pode ser algo como REGEXP("./",F8)
, que poderia então ser usada na função DATE para obter o valor de data do Excel.
Por conveniência, aqui está a fórmula na sua forma completa.
=DATE(RIGHT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),MATCH("/",MID(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),LEN(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-ROW(1:25),1),0)),LEFT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),SEARCH("/",IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-1),MID(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),LEN(LEFT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),SEARCH("/",IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))+1)),LEN(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-MATCH("/",MID(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),LEN(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-ROW(1:25),1),0)-LEN(LEFT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),SEARCH("/",IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))+1))))