2017-09-12 9 views
0

Excelシートで列Aの値を並べ替えようとしています。 例:複数の10進数で列を並べ替える

1.2 
2.1 
3.1 
1.1.1 
1.2.3 

私はそれを再配置しなければならないの並べ替え]ボタンをクリックしたとき。

1.2 
1.1.1 
1.2.3 
2.1 
3.1 

私は、ソートのコードを書かれているが、我々は1ドット以上を追加するときにその整数は、それは文字列を持っている変換秀でるためのコードは、単一の小数値のソートありません。私が間違っている場所をお勧めしますか?

Private Sub Sort_Click() 
    Dim xlSortA As XlSortOrder 
    Dim LastRow As Long 

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

     If (CInt(.Range("A2").Value) > CInt(.Range("A" & CStr(LastRow)))) Then 
      xlSortA = xlAscending 
     End If 

     .Range("A2:D10" & LastRow).Sort Key1:=.Range("A2:D10"), Order1:=xlSort, Header:=xlNo, _ 
      OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ 
      DataOption1:=xlSortNormal 
    End With 

    ActiveWorkbook.Save 
    End Sub 

注:ソートに基づいて、残りの列も再配置する必要があります。

+0

列をテキストにフォーマットします –

+0

変数xlSortAの使用は表示されません。 – ExcelinEfendisi

+0

@ Nathan_Savテキストソートは、** '1.10.1'の後に' 1.2.1' **をソートすることに注意してください。それは私たちが期待するものではないかもしれません。しかし、ソートアルゴリズムはExcelに組み込まれていないので、これを期待通りに得ることができます。だから、これは達成するのは簡単な仕事ではありません。 –

答えて

0

「1.2.3」のデータを「。」で分割した後、 、新しいシートの3つの列でデータをソートします。

Sub test() 
    Dim vDB, rngDB As Range 
    Dim Ws As Worksheet, Temp As Worksheet 
    Dim vSplit, vR(), v 
    Dim r As Long, c As Integer, i As Long, n As Integer 

    Set Ws = ActiveSheet 
    With Ws 
     LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row 
     Set rngDB = .Range("a2", "d" & LastRow) 
     vDB = rngDB 
     r = UBound(vDB, 1) 
     c = UBound(vDB, 2) 
    End With 
    ReDim vR(1 To r, 1 To 3) 
    Set Temp = Sheets.Add 
    With Temp 
     .Range("a1").Resize(r, c) = vDB 
     For i = 1 To r 
      n = 0 
      vSplit = Split(vDB(i, 1), ".") 
      For Each v In vSplit 
       n = n + 1 
       vR(i, n) = v 
      Next v 
     Next i 
     .Range("e1").Resize(r, 3) = vR 
     .Range("a1").CurrentRegion.Sort Key1:=.Range("e1"), Order1:=xlAscending, key2:=.Range("f1"), Order2:=xlAscending, Key3:=.Range("g1"), order3:=xlAscending 
     vDB = .Range("a1").Resize(r, c) 
     Application.DisplayAlerts = False 
     .Delete 
     Application.DisplayAlerts = True 
    End With 
    rngDB = vDB 
End Sub 
関連する問題