|
▼星 さん:
>▼kobasan さん
> 回答をいただき、ありがとうございます。
>ご紹介していただいた方法で試しましたので、有効でした。
>もし、並べ替えの順番は「昇順」また「降順」ではなく、ある無規則順で、
>並べ替える場合は、とても難しいと思いますが、Excelのブック内では、
>不可能でしょうか?
>
>無規則順
>No01 No05 No09 No04 No03 No02 No08
「無規則順」と言うのが、如何言う意味か解りませんが?
希望する順番に並べ替えると言うならこんなのでも善いのかな?
Option Explicit
Option Compare Text
Public Sub ColumnsSort()
Dim i As Long
Dim j As Long
Dim lngRows As Long
Dim lngColumn As Long
Dim rngList As Range
Dim vntData As Variant
Dim vntTitle As Variant
Dim strProm As String
'画面更新を停止
Application.ScreenUpdating = False
'並べたい列見出しの順番に列見出しを列挙
vntTitle = Array("No01", "No05", "No09", "No04", "No03", "No02", "No08")
'Listの左上隅を基準セル位置として設定(列見出しの最左が「No01」ならこの位置)
Set rngList = ActiveSheet.Cells(1, "A")
With rngList
'データ行数を取得
lngRows = .Offset(65536 - .Row).End(xlUp).Row - .Row + 1
'データ列数を取得
lngColumn = .Offset(, 256 - .Column).End(xlToLeft).Column - .Column + 1
'データBookの列見出しを取得
vntData = .Resize(, lngColumn).Value
End With
'Indexの配列を確保
ReDim vntIndex(1 To lngColumn)
'データの列見出しと並べ替えたい順番と比較
For i = 0 To UBound(vntTitle)
'整列順のIndexを作成
For j = 1 To lngColumn
If vntTitle(i) = vntData(1, j) Then
vntIndex(j) = i
Exit For
End If
Next j
Next i
With rngList
'行を挿入
.EntireRow.Insert
'列整列用の順位Keyを出力
.Offset(-1).Resize(, lngColumn).Value = vntIndex
'順位Keyを元に列を整列
.Offset(-1).Resize(lngRows + 1, lngColumn).Sort _
Key1:=.Offset(-1), Order1:=xlAscending, _
Header:=xlNo, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlLeftToRight, SortMethod:=xlStroke
'整列Key行を削除
.Offset(-1).EntireRow.Delete
End With
strProm = "処理が完了しました"
Wayout:
'画面更新を再開
Application.ScreenUpdating = True
Set rngList = Nothing
MsgBox strProm, vbInformation
End Sub
|
|