/ / Sortieren von Zeichenfolgenvariablen in VBA - Excel, VBA, Excel-VBA

Strings-Variablen in VBA sortieren - Excel, VBA, Excel-Vba

Ich habe vier Saiten. Diese vier repräsentieren 4 Viertel. Diese vier Zeichenfolgen lauten: (Diese sind tatsächlich nach meinem Computer sortiert). Was theoretisch in der Welt der Saiten zutrifft. Q1FY15 Q2FY15 Q3FY14 Q4FY14.

Wenn ich aber auch den Jahresteil berücksichtige, möchte ich nach dem Sortieren in aufsteigender Reihenfolge, dass das Ergebnis so ist

Q3FY14 Q4FY14 Q1FY15 Q2FY15

Kann mir jemand sagen, ob dies ohne Berücksichtigung von Teilzeichenfolgen-Komplikationen möglich ist :)

Antworten:

0 für die Antwort № 1

Nicht ohne Teilstrings. Sie können eine Referenzspalte erstellen, indem Sie = right (quartercell, 2) & = left (quartercell, 2) kombinieren, dies sind jedoch Teilzeichenfolgenfunktionen, obwohl sie den Begriff substring nicht verwenden


0 für die Antwort № 2

Wenn Sie Code verwenden können, können Sie mit dem folgenden Unter Ihre Informationen sortieren, wie Sie möchten:

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

Beachten Sie, dass in diesem Unterabschnitt davon ausgegangen wird, dass sich Ihre Informationen in Spalte 1 befinden und dass sich nur die Informationen, die Sie sortieren möchten, in dieser Spalte befinden.

Dies funktioniert für so viele Zeichenfolgen, wie Sie benötigen.