[[20170710165754]] 『range関数をcells関数に変えるとソートがエラーに』(ぽんとりん) ページの最後に飛ぶ

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

 

『range関数をcells関数に変えるとソートがエラーに』(ぽんとりん)

今まではrange関数で1500行までのソートを行っていたのですが、
行数がそれ以上に増えることになったので、行数をCNT変数に入れ
range関数をcells関数に変えたとことエラーとなってしまいました。

*****range関数使用******

  Columns("A:D").Select
    ActiveWorkbook.Worksheets("作業用(変更不可)").sort.SortFields.Clear
    ActiveWorkbook.Worksheets("作業用(変更不可)").sort.SortFields.Add Key:=Range( _
        "D2:D1500"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("作業用(変更不可)").sort.SortFields.Add Key:=Range( _
        "A2:A1500"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("作業用(変更不可)").sort.SortFields.Add Key:=Range( _
        "B2:B1500"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortTextAsNumbers
    With ActiveWorkbook.Worksheets("作業用(変更不可)").sort
        .SetRange Range("A1:D1500")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
   End With
***ここまで***

*******cells関数に変更******

 Columns("A:D").Select
    ActiveWorkbook.Worksheets("作業用(変更不可)").sort.SortFields.Clear
    ActiveWorkbook.Worksheets("作業用(変更不可)").sort.SortFields.Add Key:=Range( _
        Cells(2, "D"), Cells(cnt + 1, "D")), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("作業用(変更不可)").sort.SortFields.Add Key:=Range( _
       Cells(2, "A"), Cells(cnt + 1, "A")), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
   ' ActiveWorkbook.Worksheets("作業用(変更不可)").sort.SortFields.Add Key:=Range( _
        "B2:B3000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortTextAsNumbers
    ActiveWorkbook.Worksheets("作業用(変更不可)").sort.SortFields.Add Key:=Range( _
       Cells(2, "A"), Cells(cnt + 1, "B")), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortTextAsNumbers
    With ActiveWorkbook.Worksheets("作業用(変更不可)").sort
        .SetRange Range(Cells(1, "A"), Cells(cnt + 1, "D"))
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
   End With

***ここまで****
以上になります。なぜエラーになってしまうのでしょうか。どのように修正したらよいでしょうか。ご指導宜しくお願いします。

< 使用 Excel:Excel2013、使用 OS:Windows7 >


3つ目のキー指定が、A1:B1500 になっているからでは? B列を指定するのだから、B1:B1500 にしないとでしょう。 これはもうちょっと頑張ってデバッグし、ご自身で見つけるべき内容ですね。 惜しい!
(???) 2017/07/10(月) 17:30

見つけ方のコツですが、キーを3つ指定しているのだから、これをコメントアウトして、1つのキーで動かしてみます。動いたなら2つ指定にしてみる。3つ指定に戻してみる。あれ、3つだと駄目?

次に、2,3番目のキーは有効にして、1つ目だけコメントアウトしてみます。2つでも駄目? 1と2ならOKなのに?

ここで3つ目のキーを疑い、3つ目だけ有効にして動かしてみます。おや、1つでも駄目だ。

ここまで特定できれば、後は3つ目と他の違いを眺めてみれば、発見できた事でしょう。
(???) 2017/07/10(月) 17:35


ご指導本当にありがとうございます。
解決いたしました。
確かに自分で見つけられる内容でした。
rangeをsellsにしたことで、きっと違うところに原因があると思いこんだのが敗因でした。
3つのキーを切り分けるのも確かにそうですね。
障害時に切り分けて考えることも意識してデバッグしていきます!!

(ぽんとりん) 2017/07/10(月) 18:00


コメント返信:

[ 一覧(最新更新順) ]


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