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