Analyser une chaîne à ajouter à un tableau

0

Disons que j'ai une longue ficelle sur une cellule

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

B: (3 espaces) 1/8/16 School Cat 10/10/10

Je veux capturer les 1/2/15 et 1/8/16

Le problème est que la première chaîne est séparée par 1 espace la deuxième chaîne est séparée par 3 espaces

Donc pour moi

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

myStringArr(1) = 1/2/15

Ne fonctionne que pour la première chaîne, pas la deuxième

Que pourrais-je utiliser à la place de la condition «single space» pour analyser la chaîne et capturer la 1ère date à chaque fois

Geai
la source
En supposant que vous ayez des chaînes commençant par les données de dates, vous pouvez utiliser la fonction Trim VBA pour supprimer les espaces de début des chaînes, puis suivre votre approche.
Patkim
Vous pouvez également utiliser des expressions régulières pour cela. stackoverflow.com/questions/22542834/…
Máté Juhász

Réponses:

1

Ceci est simple comme bonjour, seulement si la structure de la chaîne est comme ça.

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
dmb
la source
0

Voici une solution VBA utilisant Regex. La fonction définie par l'utilisateur prend deux paramètres: la référence de cellule et le numéro de correspondance. La méthode regex Execute renvoie tous les modèles correspondants et la fonction correspondante (comme vous le souhaitez) (si vous souhaitez renvoyer la deuxième date dans la chaîne d'entrée). La date correspondante est renvoyée sous forme de valeur de date, mais elle peut être modifiée pour renvoyer sous forme de chaîne en supprimant la fonction 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

Exemple d'utilisation: =ExtractDate(A1,2)

Cela renverra la deuxième date trouvée dans la chaîne dans la cellule A1

Rob Gale
la source