none
Procurar uma data (em diversos formatos) dentro de uma string RRS feed

  • 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,

    sexta-feira, 16 de setembro de 2016 19:37

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
    ----------------------------------------------------------

    sexta-feira, 16 de setembro de 2016 19:53
  • 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

    sábado, 17 de setembro de 2016 13:28
    Moderador