VBAでは、Excelでは、CustomOrderパラメーターを使用して値を並べ替え、並べ替えるアイテムを選択できます。残念ながら、アイテムのシーケンスはコンマで区切られており、私の並べ替えアイテムの1つにコンマが含まれています。たとえば、最初の列のデータを2番目の列のカテゴリで並べ替えたいとします。 「Air、Land、or Sea」カテゴリにはカンマが含まれています。
Data1 Aerospace Data2 Cyberspace Data3 Cyberspace Data4 Air、Land、or Sea Data5 Aerospace Data6 Air、Land、or Sea Data7 Cyberspace
VBAマクロを記録すると、作成されるコードは次のようになります。
MyWorksheet.Sort.SortFields.Add Key:=Range( _
"B:B"), SortOn:=xlSortOnValues, Order:=xlAscending, _
CustomOrder:= "Cyberspace,Air,Land,or Sea,Aerospace", _
DataOption:=xlSortNormal
MyWorksheet.Sort.Apply
したがって、カスタムの並べ替え順序は、「Cyberspace」、「Air、Land、またはSea」、「Aerospace」の順になります。ただし、コンマのため、2番目のカテゴリーは3つのカテゴリーとして扱われます。 「空気、陸、または海」の行は、Excelがそれらに一致するカスタムの並べ替えを見つけられないため、下に並べ替えられます。埋め込まれたコンマを含むカテゴリでCustomOrderを機能させる方法はありますか?
カテゴリを二重引用符で囲み、区切り文字のコンマをセミコロンに置き換えてみました(Excelがコンマではなくセミコロンを受け入れることを期待しています)。どちらもうまくいきませんでした。
Apply
がないようです。追加できますか
MyWorksheet.Sort.Apply
あなたが持っているカスタムオーダーは私のサンプルのように機能しています。
[〜#〜] edit [〜#〜] OP更新質問に基づいて更新
マクロを次のように編集します-OrderCustomパラメータに配列を使用します。
Dim oWorksheet As Worksheet
Set oWorksheet = ActiveWorkbook.Worksheets("Sheet1")
Dim oRangeSort As Range
Dim oRangeKey As Range
' one range that includes all colums do sort
Set oRangeSort = oWorksheet.Range("A1:B9")
' start of column with keys to sort
Set oRangeKey = oWorksheet.Range("B1")
' custom sort order
Dim sCustomList(1 To 3) As String
sCustomList(1) = "Cyberspace"
sCustomList(2) = "Aerospace"
sCustomList(3) = "Air, Land, or Sea"
Application.AddCustomList ListArray:=sCustomList
' use this if you want a list on the spreadsheet to sort by
' Application.AddCustomList ListArray:=Range("D1:D3")
oWorksheet.Sort.SortFields.Clear
oRangeSort.Sort Key1:=oRangeKey, Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=Application.CustomListCount + 1, MatchCase:=False, _
Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
' clean up
Application.DeleteCustomList Application.CustomListCount
Set oWorksheet = Nothing
わかりました...更新された説明に基づいて、並べ替えるものの横にある列の数式はどうですか。
したがって、「Air、Land、or Sea」がB1列にある場合、C1は次のようになります。
=SUBSTITUTE(B1,",","|")
次に、次のようにカスタムソートを実行できます。
MyWorksheet.Sort.SortFields.Add Key:=Range( _
"B:B"), SortOn:=xlSortOnValues, Order:=xlAscending, _
CustomOrder:= "Cyberspace,Air|Land|or Sea,Aerospace", _
DataOption:=xlSortNormal
MyWorksheet.Sort.Apply
範囲を適切に調整してください。