ソートの罠

あるシートのデータを条件によってソートするコード。 何回か書いたことがあるけど、もう忘れているので何時ものようにネットをググれば解答例がいっぱい出てくる。 同じように書いて、勿論条件は自分の必要な条件に書き換えて実行してみると、上手く行く時と、ソートしなかったり、実行時エラーになる時がある。 いろいろやってみて、やっとわかった。 SetRengeメソッドでセットするRengeの修飾が抜けていたので、開いているシートによって結果が違っていたみたい。 ネットの例では、Withステートメントで書かれていたんだけど、With使うのあんまり好きじゃないので都度修飾する文を入れていたのだけど、SetRengeメソッドのところは入れてなかった。 当然Withでくくれば修飾はいらないので書き換えたボクの失敗ではある。 以下に不完全なコードと正しいコードを書いておく。

■ダメなコード ThisWorkbook.Worksheets("ほげほげ").Sort.SortFields.Clear ThisWorkbook.Worksheets("ほげほげ").Sort.SortFields.Add _ Key:=Range("D2"), _ SortOn:=xlSortOnValues, _ Order:=xlAscending, _ DataOption:=xlSortNormal ThisWorkbook.Worksheets("ほげほげ").Sort.SetRange Range("A1").CurrentRegion ThisWorkbook.Worksheets("ほげほげ").Sort.Header = xlYes ThisWorkbook.Worksheets("ほげほげ").Sort.Apply ■正しいコード ThisWorkbook.Worksheets("ほげほげ").Sort.SortFields.Clear ThisWorkbook.Worksheets("ほげほげ").Sort.SortFields.Add _ Key:=Range("D2"), _ SortOn:=xlSortOnValues, _ Order:=xlAscending, _ DataOption:=xlSortNormal ThisWorkbook.Worksheets("ほげほげ").Sort.SetRange ThisWorkbook.Worksheets("ほげほげ").Range("A1").CurrentRegion ThisWorkbook.Worksheets("ほげほげ").Sort.Header = xlYes ThisWorkbook.Worksheets("ほげほげ").Sort.Apply
--

No comments: