0
votes

Trier les dates ascendantes

Je connais sa base, mais je suis nouveau pour exceller VBA et apprendre, comment puis-je trier une chaîne avec des dates de CSV pour commander en courant par exemple

résultat = "31-déc-2020,24-SEP-2020,25-Mar-2021,02-JUL-20202009-JUL-202020,16-JUL-2020,30-JUL-2020,23- Jul-2020,27-août-2020,06-août-202020,13-août-2020202020-202020,30-DEC-2021,29-DEC-2022,29-JUN-2023,24-JUN- 2021,30-Jun-2022 "


1 commentaires

Chaque jeudi ? NSE :)


3 Réponses :


2
votes

Si la chaîne est dans "A2", entrez dans la formule "B2" suivante. Ou vous pouvez l'utiliser dans une autre procédure souhaitée.

Option Explicit

Function SortArr(myString As String, deLmt As String, Optional srtCriteria = 0)
'myString is deLmt seperated Dates string
'srtCriteria is criteria to sort; 0 or nothing for Ascending, Other digit for descending.
Dim Lb As Long, Ub As Long, i As Long, j As Long
Dim arr, reverseArray
Dim strTemp As String

arr = Split(Trim(myString), deLmt)
Lb = LBound(arr)
Ub = UBound(arr)
For i = Lb To Ub - 1
    For j = i + 1 To Ub
        If DateValue(arr(i)) > DateValue(arr(j)) Then
        strTemp = arr(i)
        arr(i) = arr(j)
        arr(j) = strTemp
        End If
    Next j
Next i

If srtCriteria = 0 Then
    SortArr = Join(arr, deLmt)
    Else
    ReDim reverseArray(Ub)
        For i = 0 To Ub
            reverseArray(i) = arr(Ub - i)
        Next
    SortArr = Join(reverseArray, deLmt)
End If

End Function


13 commentaires

Bonjour, merci oui pour NSE :), la sortie que je reçois est "02-JUL-2020 06-Aug-2020,09-Jul-2020,13-août-202020,16-JUL-2020, 20 août -2020,23-JUL-2020 2124-JUN-2021,24-SEP-202020.25-Mar-2021, 27-août-2020,29-DEC-2022,29-JUN- 2023,30-DEC-2021,30-JUL-2020, 30-JUN-2022,31-DEC-2020 "Mais j'ai besoin selon l'expiration ... Colonne de date ..


Je ne sais pas pourquoi vous obtenez des résultats différents. Voir l'image ajoutée. Peut être son format de date dans votre système. Voulez-vous que la chaîne soit divisée dans une colonne triée? Quel est le format de date dans votre barre de formule Excel?


En fait, je passe le résultat de la chaîne à la fonction, sans l'utiliser comme fonction Excel. peut-il être trié?


Alors que le tri est correct, la question est étendue avec Colonne de date d'expiration qui n'est pas mentionné dans la question, @kiran pourquoi?


D'accord avec @luuk. Kiran, pour éviter une discussion longue, veuillez modifier la question avec le résultat souhaité peut être avec un échantillon d'écran. De plus, au lieu d'entrer dans le résultat trié en tant que chaîne de votre fonction Excel, vous pouvez mentionner cette fonction "Sortarr" à la place de la chaîne de votre fonction Excel. Rappelez-vous, il y a Limiter le nombre de caractères Nous entrons dans une fonction Excel


Naresh, le "résultat" ci-dessus est émis par une fonction, mais je souhaite formater cette sortie à "02-JUL-2020,09-JUL-2020,16-JUL-2020,23-JUL-2020,30-JUL -2020, 06-Août-2020,13-Aug-2020,20-Aug-2020,27-Aug-2020,24-Sep-2020, 31-déc-2020,25-Mar- 2021,24 juin-2021,30-DEC-2021,30-JUN-2022, 29-DEC-2022229-JUN-2023 ". .. Pas de colonnes Excel impliquées ici.


Au lieu de la colonne Excel, pouvez-vous essayer de passer le résultat à une fonction directement, vous obtiendrez un tri différent.


Ainsi, au lieu d'A2 dans ma fonction, vous devez mentionner votre fonction donnant ce résultat. En bref, enveloppez votre fonction avec la fonction SortRarr. .. comme = sortar (votre fonctionnement, ", 0)


Naresh, toujours en train d'obtenir la même sortie, c'est ma fonction où je supprime des doublons et que je reçois une sortie unique, il suffit de trier selon l'expiration Fonction publique UNIK (RNG AS de la plage) que String Dim C en tant que collection, R. c = nouvelle collection sur erreur CV Suivant pour chaque r dans rnd v = r.value c.add v, cstr (v) si err.number = 0 puis unique = UNIK & "", "& v Si le prochain R sur Erreur Goto 0 Unik = Mid (Unik, 2) Fonction finale


Ok .. Je l'ai eu .. Alors avez-vous essayé = sortar (unik (gamme), ",", 0) ... J'ai essayé; aucune erreur pour les dates. C'est pourquoi je vous ai demandé un format de date dans la barre de formule. Entrez une date dans une cellule et voyez la barre de formule comment elle ressemble.


Laissez-nous Continuez cette discussion dans le chat .


Oui pour les dates, nous devons utiliser DateValue. lors de la comparaison entre les tableaux .... Cela résolut le problème.


Content de l'entendre. .. édité la réponse également en mentionnant S pour les dates. Merci



2
votes

Array de dates dans une chaîne
  • Vous n'exécutez que le premier sous , les trois procédures suivantes sont en cours d'étant appelé.
  • Le résultat est un tableau 1D contenant les dates (comme date date ).
  • le dernier sous- démontre comment transpose de la même manière que divisée convertit les dates en cordes. La même chose arrive avec le ArrayList . En outre, il montre comment copier les tableaux sur des colonnes dans un feuille de calcul.

    comment?

    • Le getdates appelle la fonction getdatesfromstring qui divise la chaîne par "", " au init Array et chacune de ces nouvelles chaînes est divisée par "-" dans le tableau TRAY.
    • Ensuite, les valeurs sont écrites dans le tableau DATA où chaque deuxième valeur représentant le mois est calculée en appelant la fonction getmontheng3 fonction.
    • Enfin, le tableau est en train d'être trié par le Sous Sort1d qui utilise l'algorithme QuickSort DATA < / code> dans le sous- ( getdates ).

      le code xxx


0 commentaires

2
votes

Si l'on possède Excel O365, vous n'avez pas besoin d'utiliser un UDF. Une solution possible (avec votre texte dans A1 ): xxx


0 commentaires