| 
    
     |  | ▼星 さん: >▼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
 
 |  |