[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『データの並べ替え(昇順)』(ぴーちゃん)
お世話になっています。
データを昇順について質問させていただきます。
Sheet1の表には、データが記載されています。
データ範囲は、A~Uまで、データ量は日々更新毎に異なります。(I列が常に最大長さの表になります)
1行目が見出しです。
Dim Wsh1 As Worksheet
Dim TgtRng As Range
Set Wsh1 = Sheets("sheet1")
Set TgtRng = Wsh1.Range("A1:U" & Wsh1.Cells(Wsh1.Rows.Count, "I").End(xlUp).Row)
昇順に並べ替えたい項目は3つあります。
優先順は、T列、 K列、O列の順です。
下記マクロは、自動記録したものですが、自動記録では行が21行目までと固定されてしまい、変動ある場合に対応できず困っています。
Sub Macro4()
Range("A2:U21").Select ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add2 Key:=Range("T2:T21") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add2 Key:=Range("K2:K21") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add2 Key:=Range("O2:O21") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").Sort .SetRange Range("A2:T21") .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With
End Sub
調べてみてマクロを作成したのですが、起動しません。
また、下記マクロでも、範囲が固定されていることに困っています。
Sub サンプル1()
With Sheets("sheet1") .Sort.SortFields.Clear .Sort.SortFields.Add Key:=.Range("T1"), Order:=xlAscending .Sort.SortFields.Add Key:=.Range("K1"), Order:=xlAscending .Sort.SortFields.Add Key:=.Range("O1"), Order:=xlAscending .Sort.SetRange .Range("A1:U21") .Sort.Header = xlYes
End With End Sub
お手数ですが、ご教示いただきたく宜しくお願いいたします。
< 使用 Excel:unknown、使用 OS:unknown >
↓は何をやっているか理解できてますか?理解できているなら悩むとも思えないのですが・・・
Wsh1.Cells(Wsh1.Rows.Count, "I").End(xlUp).Row
(【21】行目固定になっちゃって困ってるのですよね?)
(もこな2) 2021/05/05(水) 22:35
こうかな。 書いちゃったんで失礼します。
Sub Macro4() Dim Wsh1 As Worksheet Dim TgtRng As Range
Set Wsh1 = Sheets("sheet1") Set TgtRng = Wsh1.Range("A1:U" & Wsh1.Cells(Wsh1.Rows.Count, "I").End(xlUp).Row)
With Wsh1.Sort .SortFields.Clear .SortFields.Add2 Key:=Wsh1.Range("T2") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal .SortFields.Add2 Key:=Wsh1.Range("K2") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal .SortFields.Add2 Key:=Wsh1.Range("O2") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal .SetRange TgtRng .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub
(γ) 2021/05/05(水) 22:43
Wsh1.Cells(Wsh1.Rows.Count, "I").End(xlUp).Row
こちらは、I列にて最大行を取得していると理解しています。
こちらを、今回行ないたい並べ替えのマクロにどのように反映したら良いのかわかりませんでした。
y様よりご回答いただいたマクロをみますと、
Set TgtRng = Wsh1.Range("A1:U" & Wsh1.Cells(Wsh1.Rows.Count, "I").End(xlUp).Row) ’→1
.SetRange TgtRng
このようにして、記載することにより範囲を取得できるのかと理解しています。
しかし、y様よりいただきましたマクロを実行しますと、
実行時エラー438となり、オブジェクトはこのプロパティまたはメソッドをサポートしていません。となってしまいました。
下記の箇所です。
.SortFields.Add2 Key:=Wsh1.Range("T2") _ ’→2
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
また、教えていただきたいのですが、今回A1:Uの1行目は、見出しです。
範囲は、’→1の通り1行目からとっています。
並べ替えは、’→2の通り2行目からの指定となっています。
.Header = xlYes → こちらは、すみません。どういう意味でしょうか?
ネットで調べると、範囲全体が並べ替えられません。と書いてあり、よくわかりません。。
また .Apply も、ネットでは現在適用されている並べ替え状態に基づいて範囲を並べ替えます。と書かれていますが、
今回のマクロでは、どの状態がそれに当たるのでしょうか?
(記載しなくても起動するのでしょうか?必ず記載が必要なものなのでしょうか?)
素人質問ですみませんが、ご教示いただけますと助かります。
宜しくお願いいたします。
(ぴーちゃん) 2021/05/06(木) 22:09
(Add2というのは、比較的最近追加されたメソッドだと思います。(Excel2010には無い))
こういうこともあるので、質問する際は、きちんとOSとバージョンを明記してください。)
>.Header = xlYes → こちらは、すみません。どういう意味でしょうか?
SortオブジェクトのHederプロパティの意味をヘルプで調べてください。
>また .Apply も、ネットでは現在適用されている並べ替え状態に基づいて範囲を並べ替えます。
>と書かれていますが、
>今回のマクロでは、どの状態がそれに当たるのでしょうか?
それまでにソートにあたっての前提を色々と設定してきて、
最後に .Applyで実際にソートしてくれ、
という指示を出しているわけです。
もちろん.Applyを命令しなければ、前提を設定しただけなので、ソートはされません。
(γ) 2021/05/06(木) 22:42
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.