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 p>
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 " P>
3 Réponses :
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
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 code> 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) code>
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 code>
Ok .. Je l'ai eu .. Alors avez-vous essayé = sortar (unik (gamme), ",", 0) code> ... 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
sous code>, les trois procédures suivantes sont en cours d'étant
appelé. li>
- Le résultat est un tableau 1D contenant les dates (comme date
date code>). LI>
- le dernier sous- code> démontre comment
transpose code> de la même manière que divisée code>
convertit les dates en cordes. La même chose arrive avec le ArrayList code>.
En outre, il montre comment copier les tableaux sur des colonnes dans un
feuille de calcul. li>
ul> comment? strong> p>
- Le
getdates code> appelle la fonction getdatesfromstring code> qui divise la chaîne par "", " code> au init code> Array et chacune de ces nouvelles chaînes est divisée par "-" code> dans le tableau code> TRAY. LI>
- Ensuite, les valeurs sont écrites dans le tableau CODE> DATA CODE> où chaque deuxième valeur représentant le mois est calculée en appelant la fonction
getmontheng3 code> fonction. Li>
- Enfin, le tableau est en train d'être trié par le
Sous code> Sort1d code> qui utilise l'algorithme QuickSort étant transmis à la variable DATA < / code> dans le sous- code> ( getdates code>). LI>
ul> le code strong> p> xxx pré> h2>
Si l'on possède Excel O365, vous n'avez pas besoin d'utiliser un UDF. Une solution possible (avec votre texte dans A1 code>):
Chaque jeudi ? NSE :)