/ / Tri des variables de chaînes dans VBA - excel, vba, excel-vba

Tri des variables de chaînes dans VBA - excel, vba, excel-vba

J'ai quatre cordes. Ces quatre représentent 4 trimestres. ces quatre chaînes sont: (qui sont en fait dans l'ordre de tri en fonction de mon ordinateur). Ce qui est théoriquement vrai dans le monde des chaînes. Q1FY15 Q2FY15 Q3FY14 Q4FY14.

Mais si je considère aussi la partie année, puis après avoir trié par ordre croissant, je veux que le résultat soit aussi

Q3FY14 Q4FY14 Q1FY15 Q2FY15

Quelqu'un peut-il me dire si cela est possible sans considérer les complications de la sous-chaîne :)

Réponses:

0 pour la réponse № 1

Pas sans sous-chaînes. Vous pouvez créer une colonne de référence combinant = right (quartercell, 2) & = left (quartercell, 2), mais ce sont des fonctions de sous-chaîne, bien qu’elles n’utilisent pas le terme sous-chaîne


0 pour la réponse № 2

Si vous pouvez utiliser du code, vous pouvez utiliser le sous-marin suivant pour trier vos informations comme vous le souhaitez:

Option Explicit

Sub SortStrings()
"This sub will sort the values in column 1 by year and then by quarter based on
"the format of "Q1FY14"
"
"Written by TheEngineer on 12/10/2014

Dim LastRow As Long
Dim qCount  As Long
Dim i As Long, j As Long, k As Long

Application.ScreenUpdating = False

With ActiveSheet
LastRow = .Cells(Rows.Count, 1).End(xlUp).Row

For i = 1 To LastRow
For j = i + 1 To LastRow
If CInt(Right(.Cells(j, 1).Value, 2)) > CInt(Right(.Cells(i, 1).Value, 2)) Then
If j <> i + 1 Then
.Cells(j, 1).Cut
.Cells(i + 1, 1).Insert Shift:=xlDown
End If
Else
.Cells(j, 1).Cut
.Cells(i, 1).Insert Shift:=xlDown
End If
Next j
Next i

qCount = 0
For i = 1 To LastRow
For j = i + 1 To LastRow
If CInt(Right(.Cells(j, 1).Value, 2)) = CInt(Right(.Cells(i, 1).Value, 2)) Then
qCount = qCount + 1
End If
Next j

For k = i + 1 To qCount + i
If CInt(Left(Right(.Cells(k, 1).Value, Len(.Cells(k, 1).Value) - 1), 1)) > CInt(Left(Right(.Cells(i, 1).Value, Len(.Cells(i, 1).Value) - 1), 1)) Then
If k <> i + 1 Then
.Cells(k, 1).Cut
.Cells(i + 1, 1).Insert Shift:=xlDown
End If
Else
.Cells(k, 1).Cut
.Cells(i, 1).Insert Shift:=xlDown
End If
Next k
qCount = 0
Next i
End With

Application.ScreenUpdating = True

End Sub

Notez que ce sous suppose que vos informations sont dans la colonne 1 et que seules les informations que vous souhaitez trier sont dans cette colonne.

Cela fonctionnera pour autant de chaînes que vous avez besoin.