Analisando uma string para adicionar a uma matriz

0

Digamos que eu tenha uma longa string em uma célula

A: 1/2/15 Dog School 9/20/19

B: (3 vagas) 1/8/16 Cat Escola 10/10/10

Eu quero capturar 1/2/15 e 1/8/16

O problema é primeira string é separada por 1 espaço segunda string é separada por 3 espaços

Então, para mim

myStringArr = Split(myString,” “) 
MsgBox myStringArr(1)

myStringArr(1) = 1/2/15

Funciona apenas para a primeira string e não para a segunda string

O que eu poderia usar em vez da condição de "espaço único" para analisar a sequência e capturar a primeira data toda vez

    
por Jay 23.05.2018 / 19:16

2 respostas

1

Isso é simplesmente simples, apenas se a estrutura da string for assim.

dim tmp() as Variant
dim left_date, right_date as string
for each DatesinString in StringArray
    tmp = split(LTrim(DatesinString), " ")
    left_date = tmp(0)
    right_date = tmp(Ubound(tmp))

next DatesinString
    
por 23.05.2018 / 20:26
0

Aqui está uma solução do VBA usando o Regex. A função definida pelo usuário aceita dois parâmetros: a referência da célula e o número da correspondência. O método regex Execute retorna todos os padrões correspondentes e a função retorna a correspondência apropriada conforme solicitado (caso você queira retornar a segunda data na string de entrada). A data correspondente é retornada como um valor de data, mas isso pode ser modificado para retornar como uma string removendo a função CDate ().

Function ExtractDate(rng As Range, matchNum As Integer) As Variant
    Dim matches As Object
    Dim target As Variant
    Dim regex As Object

    Set regex = CreateObject("VBScript.RegExp")

    With regex
        .Pattern = "(0?[1-9]|1[012])\/(0?[1-9]|[12][0-9]|3[01])\/[0-9]{2}"
        .Global = True
    End With

    Set matches = regex.Execute(rng.Value)

    If matchNum > 0 And matchNum <= matches.Count Then
        target = CDate(matches.Item(matchNum - 1).Value)
    Else
        target = CVErr(xlErrNA)
    End If

    ExtractDate = target
End Function

Exemplo de uso: =ExtractDate(A1,2)

Isso retornará a segunda data encontrada na string na célula A1

    
por 25.05.2018 / 07:49