[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『[20220504065443]並べ替えのマクロ』(素人)
[[20220504065443]]の内容において、さらに質問させていただきます。
25行ごとに並べ替えさせるマクロの設定ができればと思っています。
B5:G29を一組(25行)として、以下31組あるものを、
第1キー F列(数値)
第2キー G列(数値)
第3キー E列(I5:I14を参照(文字列)、ただし、10セル全てが入力済とは限らず空欄もあり得る)
を条件に、並べ替えさせるマクロの設定について教えてください。
よろしくお願いいたします。
< 使用 Excel:Excel2019、使用 OS:Windows10 >
(わからん) 2022/05/06(金) 21:08
そして、その操作を「マクロの記録」で記録して、コードを提示してみましょう。
<参考>
https://excel-ubara.com/excelvba1/EXCELVBA303.html
(わからん) 2022/05/06(金) 21:21
Sub Macro1()
'
' Macro1 Macro
'
'
ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add2 Key:=Range("F5:F29") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add2 Key:=Range("G5:G29") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add2 Key:=Range("E5:E29") _ , SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _ "ホンダ,ニッサン,ヒノ,ダイハツ,スバル,スズキ", DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet2").Sort .SetRange Range("C5:H29") .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Range("C5").Select End Sub (素人) 2022/05/06(金) 21:34
Sub Macro1() For i = 0 To 30 With ActiveWorkbook.Worksheets("Sheet2").Sort .SortFields.Clear .SortFields.Add2 key:=Range("F5:F29").Offset(i * 25) _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal .SortFields.Add2 key:=Range("G5:G29").Offset(i * 25) _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal .SortFields.Add2 key:=Range("E5:E29").Offset(i * 25) _ , SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _ "ホンダ,ニッサン,ヒノ,ダイハツ,スバル,スズキ", DataOption:=xlSortNormal .SetRange Range("C5:G29").Offset(i * 25) .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Next
Range("C5").Select End Sub
(わからん) 2022/05/06(金) 21:56
Sub Macro1()
Application.ScreenUpdating = False Set r = ActiveCell 'セルの位置を記憶 For i = 0 To 30 With ActiveWorkbook.Worksheets("Sheet2").Sort .SortFields.Clear .SortFields.Add2 Key:=Range("F5:F29").Offset(i * 25) _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal .SortFields.Add2 Key:=Range("G5:G29").Offset(i * 25) _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal .SortFields.Add2 Key:=Range("E5:E29").Offset(i * 25) _ , SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _ "ホンダ,ニッサン,ヒノ,ダイハツ,スバル,スズキ", DataOption:=xlSortNormal .SetRange Range("C5:G29").Offset(i * 25) .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Next r.Select 'セルの位置を復旧 Application.ScreenUpdating = True End Sub (素人) 2022/05/07(土) 00:06
補足と余談です。
とても静かになりました、というのは事実であり、それで結構なんですが、 それは"現在位置を記憶するコード"というよりも、 "画面更新を抑止するコード"の効果と言った方が適切でしょう。
以下は細かい話なので、忘れて頂いて結構です。 (1) 今回のコードでは、ソート処理では(画面抑止しない場合ですが) ・画面はスクロールしますが、 ・アクティブセルそのものは変化しませんので、 Application.ScreenUpdatingを操作するだけでOKです。
(2)余談の余談です。(たいていの人はスキップして頂いて結構です) 「余計なSelectはするな」ということが言われます。 中級者になる一里塚とも言われるほど有益なTipsです。
盲点になるのは、 「実質的に、Selectしているものは結構ありふれている」 という話があります。
SelectionChangeで調べてみると、 Range("セル1").Copy Range("セル2") とか Range("セル1").Copy Range("セル2").PasteSpecial などでも SelectionChangeが起動するんですね。
今回のコードで言うと、.Applyのところで、ソート対象範囲をTargetとして SelectionChangeが動きます。
だからと言って、それを回避せよということでなく(効果があるものは使わざるを得ない)、 内部ではSelectと同様なことが起きている、 ということを頭の片隅に入れておくとよいかもしれません、という話です。 SelectionChangeイベントプロシージャを使う場合に役立つTipsかもしれない。 (別の掲示板での記事で教えていただいたことの受け売りでした)
(γ) 2022/05/07(土) 09:47
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.