Inquiridor
Procurar uma data (em diversos formatos) dentro de uma string

Pergunta
-
Olá amigos,
Meu problema é o seguinte:
Tenho uma planilha com várias linhas, na qual preciso percorrer cada célula da coluna D em busca de uma data, atribuindo esta data a uma variável.
Como as informações da Coluna D são de um campo de texto livre, não padrões. As datas podem aparecer no início, meio ou no final do texto.
Além disso, o grande problema é que as datas não vêm num formato padrão. Elas aparecem variadamente nas seguintes formas:
##-#-####
##-##-####
##/#/####
##/##/####
##.#.####
##.##.####
##-#-##
##-##-##
##/#/##
##/##/##
##.#.##
##.##.##
##-#
##-##
##/#
##/##
##.#
##.##Abaixo, seguem as primeiras 50 linhas da coluna D, onde preciso retirar apenas a data:
MVV - 2231 - RBU930 - S. ANTONIO DE JESUS - DATA: 02/09/16 MVV RBU240 - URC - SERRA - DATA: 05/09/16 MVV - 2504 - RBU623 - NOVA JOAÇABA - DATA: 02/09/ =?ISO-8859-1?Q?2016 _?= MVV - 2432 - RBU970 - LIMEIRA - DATA: 05/09/16 MVV RBU240 - URC - SERRA - DATA: 29/08/16 MVV - 2340 - RBU138 - IPATINGA - DATA: 01/09/16 MVV - 2340 - RBU138 - IPATINGA - DATA: 02/09/16 MVV - 2340 - RBU138 - IPATINGA - DATA: 05/09/16 MVV - 2333 - RBU902 - RIO VERDE - DATA: 02/09/2016 MVV - 2333 - RBU902 - RIO VERDE - DATA: 05/09/2016 MVV 2518 - RBU 816 - CAXIAS DO SUL - DATA: 02/09/2016 MVV - 2321 - RBU609 - PETRÓPOLIS - DATA: 05/09/2016 MVV - 2403 - RBU956 - GUARULHOS - DATA: 02/09/2016 MVV - 2403 - RBU956 - GUARULHOS - DATA: 05/09/2016 MVV - 2403 - RBU900 - CAIEIRAS 2 (Cajamar) - DATA: 02/09/2016 MVV - 2759 - RBA759 - Gama Gases Campinas - DATA: 03/08/2016 MVV - 2205 - RBU940 - CRATO - DATA: 05/09/2016 Workitem CANCELADO BPOpen ID : WME08152016201702041481MVV - 2528 - RBU726 - URC LONDRINA - DATA: MVV - 2307 - RBU986 - JOÃO MONLEVADE - DATA: 02/09/16 MVV - 2528 - RBU140 - ROLANDIA - DATA: 06/09/2016. MVV - 2504 - RBU933 - TUBARÃO - DATA: 06/09/16 =?ISO-8859-1?Q? _?= MVV - 2759 - RBA759 - Gama Gases Campinas - DATA: 20/07/2016 MVV896-2304-TAGUATINGA SUL-DATA:02/09/2016 MVV - 2759 - RBA759 - Gama Gases Campinas - DATA: 18/08/2016 MVV896-2304-TAGUATINGA SUL-DATA:05/09/2016. MVV - 2551 - RBU293 - SÃO JOSÉ DOS PINHAIS - DATA: =?ISO-8859-1?Q?01=2F09=2F2016 ?= MVV - 2551 - RBU293 - SÃO JOSÉ DOS PINHAIS - DATA: =?ISO-8859-1?Q?02=2F09=2F2016 ?= MVV - 2551 - RBU293 - SÃO JOSÉ DOS PINHAIS - DATA: =?ISO-8859-1?Q?05=2F09=2F2016 ?= MVV - 2455 - RBU269 - BARRETOS - DATA: 05/09/2016 MVV - 2759 - RBA759 - Gama Gases Campinas - DATA: 22/08/2016 MVV - 2221 - RBA221 - SAO LUIS - DATA: 25/08/16 MVV - 2221 - RBA221 - SAO LUIS - DATA: 26/08/16 MVV - 2221 - RBA221 - SAO LUIS - DATA: 27.08.16 MVV - 2759 - RBA759 - Gama Gases Campinas - DATA: 24/08/2016 MVV - 2452 - RBA452 - CUIABA - DATA: 06/09/16 MVV - 2221 - RBA221 - SAO LUIS - DATA: 31/08/16 MVV - 2403 - RBA403 - OSASCO - Data: 05/09/16 Re: Caixa RBU -URC- São Luis 03-09-2016 MVV - 2403 - RBA403 - OSASCO - Data: 02/09/16 Re: Caixa RBU817- URC-São Luis 05-09-2016 Re: Caixa RBU817- URC- São Luis -05-09-2016 MVV - 2206 - RBU033 - NATAL - DATA: 02/09/2016 MVV - 2206 - RBU033 - NATAL - DATA: 02/09/2016 - RETIFICACAO MVV - 2206 - RBU033 - NATAL - DATA: 03/09/2016 MVV - 2504 - RBU623 - NOVA JOAÇABA - DATA: 05/09/ =?ISO-8859-1?Q?2016 _?= Gerar RU Depósito FUNDICAO ALTIVO S/A MVV - 2421 - RBU965 - MOGI DAS CRUZES - DATA: 06/09/2016 MVV - 2208 - RBU622 - JOAO PESSOA - DATA: 01/09/2016 MVV - 2403 - RBU958 - CAIEIRAS - DATA: 06/09/2016 Abraço a todos,
Todas as Respostas
-
Nao existe magica nesse caso. Voce vai ter que analisar linha por linha usando diversas expressoes regulares para identificar uma data. note que nem mesmo exite uma normalizaçcao de enconding, pois existem linhas com esse conteudo: 05/09/ =?ISO-8859-1?Q?2016 _?=
O que tavez facilite sua analise é que aparentemente uma data ocorre sempre apos a string "DATA: "
Mas nao vejo uma soluçao simples para esse caso.
Att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
-
Esta regra cobre bastantes casos, teste:
Sub WriteDate() Dim iInput As String Dim RegExp As Object Dim Patterns As Variant Dim Trashes As Variant Dim jTrash As Variant Dim jPattern As Variant Dim i As Long Set RegExp = CreateObject("VBScript.RegExp") Patterns = Array("[0-9]{2}/[0-9]{2}/[0-9]{4}", "[0-9]{2}/[0-9]{2}/[0-9]{2}", _ "[0-9]{2}.[0-9]{2}.[0-9]{4}", "[0-9]{2}.[0-9]{2}.[0-9]{2}") Trashes = Array(" =?ISO-8859-1?Q?") For i = 1 To Cells(Cells.Rows.Count, "A").End(xlUp).Row iInput = Cells(i, "A") For Each jTrash In Trashes iInput = Replace(iInput, jTrash, "") Next jTrash For Each jPattern In Patterns RegExp.Pattern = jPattern If RegExp.Test(iInput) Then Cells(i, "B") = RegExp.Execute(iInput)(0) End If Next jPattern Next i End Sub
http://www.ambienteoffice.com.br - http://www.clarian.com.br
- Sugerido como Resposta William John Adam Trindade segunda-feira, 19 de setembro de 2016 00:21