Excel (VBA) |
|
(Windows 10 Pro : Microsoft 365)
F列、G列の項目を使ってデータの並べ替えを行いたい
投稿日時: 24/05/29 16:23:46
投稿者: takatada72
|
---|---|
お疲れさまです。
|
投稿日時: 24/05/29 17:57:59
投稿者: WinArrow
|
|
---|---|
掲示したコードが
|
投稿日時: 24/05/29 22:15:04
投稿者: WinArrow
|
|
---|---|
ヒント
|
投稿日時: 24/05/30 09:50:32
投稿者: takatada72
|
|
---|---|
WinArrowさん
|
投稿日時: 24/05/30 10:22:48
投稿者: takatada72
|
|
---|---|
何度、COPILOTに問い合わせしても、同じコードでの回答してもらえません。
|
投稿日時: 24/05/30 10:56:29
投稿者: sk
|
|
---|---|
引用: (標準モジュール) ------------------------------------------------------------ Sub SortByAutoFilter() Dim wsTarget As Worksheet Dim rngTarget As Range Dim lngFirstRow As Long Dim lngLastRow As Long Set wsTarget = ActiveSheet With wsTarget If .AutoFilterMode = True Then .ShowAllData .AutoFilterMode = False End If lngFirstRow = 1 lngLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row If lngFirstRow >= lngLastRow Then Set wsTarget = Nothing Exit Sub End If Set rngTarget = .Range(.Cells(lngFirstRow, 1), _ .Cells(lngLastRow, 9)) rngTarget.AutoFilter End With With wsTarget.AutoFilter.Sort .SortFields.Clear .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .SortFields.Add2 Key:=rngTarget.Columns(6), _ SortOn:=xlSortOnValues, _ Order:=xlAscending, _ DataOption:=xlSortNormal .SortFields.Add2 Key:=rngTarget.Columns(7), _ SortOn:=xlSortOnValues, _ Order:=xlAscending, _ DataOption:=xlSortNormal .Apply End With wsTarget.AutoFilterMode = False Set rngTarget = Nothing Set wsTarget = Nothing End Sub ------------------------------------------------------------ 以上のような処理を実行できればよい、ということでしょうか。 |
投稿日時: 24/05/30 16:34:17
投稿者: WinArrow
|
|
---|---|
時: 24/05/29 16:23:46投稿者: takatada72
|
投稿日時: 24/05/31 07:26:48
投稿者: simple
|
|
---|---|
既に皆さんから指摘いただいているとおりです。
最初に 優先度の低いキー(G列)でソートし、 次に 優先度の高いキー(F列)でソートすれば望む結果が得られます。(ソート対象範囲をきちんと指定することは当然です。質問以前です) こうして考えると、Sortメソッドで指定できるキーは3つが限度ですが、 優先順位の低いものから実施すれば、実質、その制限はないとも言えます。 ■ COPILOTとかChatGPTといった生成系AIの利用にあたっては、それは間違っている可能性が かなりある、という前提で受け止めるべきです。 「COPILOTに上のコードを集約して下さい」と質問されたそうですが、適切でなかったのかもしれません。 以下のように見やすくすることはできますが、Sortオブジェクトを使う限り、 幾分コード量は増えることを甘受しなければなりません。 Sub test() With Worksheets(1).Sort With .SortFields .Clear .Add2 Key:=Range("F2"), SortOn:=xlSortOnValues, _ Order:=xlAscending, DataOption:=xlSortNormal .Add2 Key:=Range("G2"), SortOn:=xlSortOnValues, _ Order:=xlAscending, DataOption:=xlSortNormal End With .SetRange Range("A1:I10000") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub |
投稿日時: 24/05/31 08:53:45
投稿者: takatada72
|
|
---|---|
skさん、修正して頂いたので大変助かりました。skさんのコードをそのまま
|