|
結論から言うと、作業列を使ってRIGHT関数で数値の部分を抜き出すやりかたの方が
ずっと簡単・明瞭に処理できると思います。
もしどうしてもマクロ内部で並べ替えしたければ、仮にアクティブシートの
A1 から A列 にデータが並んでいるとして・・
Sub Test_MyDataSort()
Dim Ary() As Integer
Dim St As String
Dim LR As Long, i As Long, j As Long
Dim buf As Variant, vElm As Variant
LR = Range("A65536").End(xlUp).Row
ReDim Ary(1 To LR)
For i = 1 To LR
Ary(i) = CInt(Right(Cells(i, 1).Value, 3))
Next i
buf = Array_Sort(Ary())
For j = 1 To LR
With Cells(j, 1)
St = Left$(.Value, Len(.Value) - 3)
.Value = St & buf(j)
End With
Next j
End Sub
Private Function Array_Sort(ByVal NotSortedArry As Variant) As Variant
Dim i As Long, j As Long
Dim vElm As Variant
For i = LBound(NotSortedArry) To UBound(NotSortedArry)
For j = i + 1 To UBound(NotSortedArry)
If NotSortedArry(i) > NotSortedArry(j) Then
vElm = NotSortedArry(j)
NotSortedArry(j) = NotSortedArry(i)
NotSortedArry(i) = vElm
End If
Next
Next
Array_Sort = NotSortedArry
End Function
というマクロで出来ます。見てのとおり、かなり複雑なコードです。
ちなみにこの配列内ソートのロジックは、コロスケさんのサイト↓を
参考にさせていただきました。(と言うより丸写しですが・・すいません)
http://puremis.net/excel/code/022.shtml
|
|