- ベストアンサー
EXCEL2007と2003のソートの記述の違い?
下記は配布する予定で作成したプログラムの一部(ソート部)です。EXCEL2007で作成して機能しているのですが残念ながらEXCEL2003ではエラーとなります。(方法2)そこでもうひとつ(方法1)に変えてみましたがどちらもEXCEL2003ではエラーになります。 内容は1行目の見出し部分を並び替えさせるというものです。(優先順に左から右)抜粋コードの前段階では各見出しの先頭にアルファベットと数字を付加し、その後その付加を基準にソート対象列を抜粋コードにより並び替え、その後は付加コードを切り取るという流れです。 残念なことにEXCEL2003が無いものですから、2007と2003のソートの記述の違いが解りません。何卒ご教示願えませんでしょうか? ちなみに変数 見出し列数 は列のカウント数です。(ソート対象外の列)そして変数の指定の誤りというおちはありません。 方法1(2回めに2003用でもいけるかなと思って作成分) SH2.Sort.SortFields.Clear SH2.Sort.Orientation = xlLeftToRight SH2.Range(Cells(1, 見出し列数 + 1), Cells(1, 見出し列数 + 1).End(xlToRight)).Sort _ key1:=SH2.Cells(1, 見出し列数 + 1), Order1:=xlAscending, _ Header:=xlNo 方法2 (最初に深く考えず作成したもの 思いきり2007仕様になってます) With SH2.Sort '見出し優先順位により入れ替え .SortFields.Clear .SortFields.Add key:=SH2.Range(Cells(1, 見出し列数 + 1), Cells(1, 見出し列数 + 1).End(xlToRight)), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal .SetRange SH2.Range(Cells(1, 見出し列数 + 1), Cells(1, 見出し列数 + 1).End(xlToRight)) .Header = xlNo .MatchCase = False .Orientation = xlLeftToRight .SortMethod = xlPinYin .Apply End With
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
エクセルのバージョン情報で分岐させたらどうでしょうか。 '---------------------------------------------- If Int(Application.Version)>11 then '■■2007のSORT■■ With SH2.Sort .SortFields.Clear .SortFields.Add key:=SH2.Range(Cells(1, 見出し列数 + 1), Cells(1, 見出し列数 + 1).End(xlToRight)), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal .SetRange SH2.Range(Cells(1, 見出し列数 + 1), Cells(1, 見出し列数 + 1).End(xlToRight)) .Header = xlNo .MatchCase = False .Orientation = xlLeftToRight .SortMethod = xlPinYin .Apply End With Else '■■2003のSORT■■ sh2.Range(Cells(1, 見出し列数 + 1), Cells(1, 見出し列数 + 1).End(xlToRight)).Sort _ key1:=sh2.Cells(1, 見出し列数 + 1), Order1:=xlAscending, _ Header:=xlNo, _ Orientation:=xlLeftToRight End If '------------------------------------------------------- ●2003も2007も手元にないのでバージョンがわかりませんが (2003は確か11.0) ===================== 'sh2.Sort.SortFields.Clear 'sh2.Sort.Orientation = xlLeftToRight これらは2003では使えない。 2行目のOrientationはSortメソッドの引数にする。 以上。
その他の回答 (1)
- korin_
- ベストアンサー率69% (46/66)
こんにちは。 Excel2003とExcel2007では、ソートのオブジェクトが変更されているそうです。 ただ、Excel2003のオブジェクトはExcel2007でもそのまま使えるそうです。(速度は落ちますが・・・) 下記のサイトを参考にしてみてください。 http://officetanaka.net/excel/excel2007/057.htm
補足
korinさん回答ありがとうございます。 逆のパターンです。2007で作成しかつ機能するのですが、おっしゃる通りの仕様変更により2007のコードでは2003が動かない場合にはまってしまいました。2003との互換を持たせる場合ではどう書くのかな。と困っている次第です。お助けを。
お礼
>sh2.Sort.SortFields.Clear >sh2.Sort.Orientation = xlLeftToRight >これらは2003では使えない。 >OrientationはSortメソッドの引数にする。 まさにここを知りたかったのです。有難うございます。