2014-12-10 5 views
0

4 개의 문자열이 있습니다. 이 4 개는 4/4를 나타냅니다. 이 네 개의 문자열은 다음과 같습니다. (실제로 내 컴퓨터에 따라 정렬 순서입니다.) 문자열의 세계에서 이론적으로 사실입니다. Q1FY15 Q2FY15 Q3FY14 Q4FY14. 나뿐만 아니라 연도 부분을 고려한다면VBA에서 문자열 변수 정렬

누군가가 말해 줄 수 이것이 가능 여부

Q3FY14 Q4FY14 Q1FY15 Q2FY15로

은, 그때 증가하는 순서로 정렬 한 후 나는 결과가되고 싶어 부분 문자열 합병증을 고려하지 않고 :)

+0

아래 답변 중 하나가 효과가 있습니까? – TheEngineer

답변

0

부분 문자열이없는 경우. = right (quartercell, 2) & = left (quartercell, 2)를 결합한 참조 열을 만들 수 있지만 부분 문자열은 사용하지 않지만 하위 문자열 함수입니다.

0

코드를 사용할 수있는 경우 당신이 원하는 방법 정보를 정렬하려면 다음과 같은 하위를 사용 :이 서브는 귀하의 정보는 정렬 할 경우에만 정보가 해당 열에 것을 1 열에하고 있다고 가정

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 

참고.

이것은 필요한만큼의 문자열에서 작동합니다.