/ / Triedenie premenných reťazcov vo VBA - excel, vba, excel-vba

Triedenie premenných reťazcov v jazyku VBA - excel, vba, excel-vba

Mám štyri struny. Tieto štyri predstavujú 4 štvrťroky. tieto štyri reťazce sú: (Ktoré sú v skutočnosti v poradí triedenia podľa môjho počítača). Čo je teoreticky pravdivé vo svete strun. Q1FY15 Q2FY15 Q3FY14 Q4FY14.

Ale ak sa pozriem aj na tú časť roka, potom po zoradení v rastúcom poradí chcem, aby výsledok bol ako taký

Q3FY14 Q4FY14 Q1FY15 Q2FY15

Môže mi niekto povedať, či je to možné bez zváženia podružných komplikácií :)

odpovede:

0 pre odpoveď č. 1

Nie bez podreťazov. Môžete vytvoriť referenčný stĺpec kombinujúci = right (quartercell, 2) & = left (quartercell, 2), ale to sú funkcie podreťazcov, aj keď nepoužívajú termín podreťazec


0 pre odpoveď č. 2

Ak môžete použiť kód, môžete použiť nasledujúce podponuky na usporiadanie informácií o tom, ako chcete:

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

Všimnite si, že táto podložka predpokladá, že vaše informácie sú v stĺpci 1 a že v tomto stĺpci sú len informácie, ktoré chcete zoradiť.

To bude fungovať pre toľko reťazcov, koľko potrebujete.