『VBAの並べ替え引数をユーザーが任意に入力した順番にしたい』(どっこいおむすび) 差分チェックブックの実行シートの指定のセル範囲にユーザーが任意で入力した所属の順番に、 工数投入状況ブックのサマリシートのデータをを並べ替える処理がしたいです。 (データ範囲はヘッダー含めA8セルからあります) ↓のコードでは並べ替えできませんでした。 どなたか良い方法を教えてください。 sub 部署を任意に並べ替え Dim Diff_bk ,NW_bk As Workbook Dim Diff_ws ,NW_ws As Worksheet Set Diff_bk = Workbooks("差分チェックver1.xlsm") Set Diff_ws = Diff_bk.Sheets("実行") Set NW_bk = Workbooks("工数投入状況.xlsx") Set NW_ws = NW_bk.Sheets("サマリ") ’任意に並べ替えした部署を変数に入れる With Diff_ws aa = .Range("B11") bb = .Range("B12") cc = .Range("B13") dd = .Range("B14") ee = .Range("B15") ff = .Range("B16") gg = .Range("B17") End With With Summary_ws MaxRow = .Cells(Rows.Count, 1).End(xlUp).Row MaxCol = .Cells(9, 1).End(xlToRight).Column With .Sort .SortFields.Clear .SortFields.Add2 Key:=Range("A8"), CustomOrder:= _ "aa,bb,cc,dd,ee,ff,gg" .SetRange Range(Cells(8, 1), Cells(MaxRow, MaxCol)) .Header = xlYes .Apply End With End With end sub < 使用 Excel:Office365、使用 OS:Windows10 > ---- シート名が誤っていました。 正しくは With Summary_wsではなくWith NW_wsです。 しかしこれでも並べ替えできません。 (どっこいおむすび) 2022/09/05(月) 18:57 ---- WorksheetFunction.TextJoin(",", True, Diff_ws.Range("B11:B17")) (マナ) 2022/09/05(月) 19:18 ---- .SortFields.Add2 Key:=Range("A8"), CustomOrder:= _ "aa,bb,cc,dd,ee,ff,gg" ""で囲むと、変数ではなく「aa,bb,cc,dd,ee,ff,gg」という文字列です。 変数は""の外に出しましょう。 .SortFields.Add2 Key:=Range("A8"), CustomOrder:= _ aa & "," & bb & "," cc & "," dd & "," ee & "," ff & "," gg ただ、これは面倒なので、マナさんの回答のようにTextJoin関数を使うと 同じ結果になります。 (hatena) 2022/09/05(月) 19:25 ---- こんな感じで Dim myOrder As String myOrder = WorksheetFunction.TextJoin(",", True, Range("B11:B30")) として、 .SortFields.Add2 Key:=Range("A8"), CustomOrder:=CVar(myOrder) これで、どうでしょうか。 (マナ) 2022/09/05(月) 19:30 ---- マナ様 教えていただいたコードで並べ替えできました。 最初に引数の形式にして変数に入れるとよいのですね。 hatena様のご指摘内容も理解いたしました。 どうもありがとうございました。 (どっこいおむすび) 2022/09/05(月) 20:30