[[20210505201307]] 『データの並べ替え(昇順)』(ぴーちゃん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『データの並べ替え(昇順)』(ぴーちゃん)

お世話になっています。
データを昇順について質問させていただきます。

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


私の手元のExcel2019ではエラーにならずに動作します。
あなたの使用しているExcelのバージョンはいくつですか?
・マクロ記録をとったとき、
・動作確認に使用したExcelのバージョン
をそれぞれ教えてください。

(Add2というのは、比較的最近追加されたメソッドだと思います。(Excel2010には無い))
こういうこともあるので、質問する際は、きちんとOSとバージョンを明記してください。)

>.Header = xlYes → こちらは、すみません。どういう意味でしょうか?
SortオブジェクトのHederプロパティの意味をヘルプで調べてください。

>また .Apply も、ネットでは現在適用されている並べ替え状態に基づいて範囲を並べ替えます。
>と書かれていますが、
>今回のマクロでは、どの状態がそれに当たるのでしょうか?
それまでにソートにあたっての前提を色々と設定してきて、
最後に .Applyで実際にソートしてくれ、
という指示を出しているわけです。

もちろん.Applyを命令しなければ、前提を設定しただけなので、ソートはされません。

(γ) 2021/05/06(木) 22:42


ご返信いただき、ありがとうございます。
バージョンによって異なる事を知らずに、すみません。
パソコンが2台ありまして、実際に使用するパソコンにて、再度やり直したところ、きちんと起動しました。
(Add2の2を削除したら、起動できました)
色々ご教示くださり、ありがとうございました。
(ぴーちゃん) 2021/05/09(日) 16:40

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.