« 0以下は0に、その他はそのままにする | トップページ | 2次元配列をソートする »

2011年2月 5日 (土)

シートの並び替えをする

以前の記事「 配列をソートする 」の続きで
2次元配列をソートする方法を考えていたのですが、
その前にシートの「並び替え」についてVBAで実行する方法についてのまとめ。

「並び替え」を手動で実行するには
並び替えたい範囲を選択してから
[データ]-[並び替え]を選択します。
Vba20110205a

そうすると下の画像のようなダイアログが出るので
各条件を指定して実行します。
Vba20110205b

Excel2000はキーが3つまでしか指定できませんが
Excel2007はもっとキーが増えているようです。

ここではExcel2000の場合です。

下の画像は、
ある時点の価格.comのノートパソコンランキングの
TOP10の情報をシートに入れたものです。
これを使って「並び替え」をします。
Vba20110205c

今は順位(A列昇順)で並んでいます。

第一優先を最安価格(C列)、昇順
第二優先を液晶(D列)、降順
で「並び替え」ます。
Vba20110205d

これは液晶、降順で並び替えてから、
最安価格、昇順で並び替えたものと同じです。
もし最安価格が同じなら
液晶サイズが大きいほうが上になります。

並び替えるとこのようになります。
Vba20110205e

同じことをVBAで実行するコードは次のようになります。

    Range("A2:G11").Sort _
        Key1:=Range("C2"), Order1:=xlAscending, _
        Key2:=Range("D2"), Order2:=xlDescending, _
        Header:=xlNo, _
        OrderCustom:=1, _
        MatchCase:=False, _
        Orientation:=xlTopToBottom, _
        SortMethod:=xlPinYin

Range、Key、Orderのところだけ変更すれば
大体の「並び替え」はできそうです。

各引数の詳細はVBAヘルプにあります。

最後にキーを3つ使った「並び替え」のVBAコードの
テンプレートを作っておきます。

「並び替え」のVBAコードのテンプレート:

    'ヘッダーを含まない範囲の並び替え
    Range("").Sort _
        Key1:=Range(""), Order1:=xlAscending / xlDescending, _
        Key2:=Range(""), Order2:=xlAscending / xlDescending, _
        Key3:=Range(""), Order3:=xlAscending / xlDescending, _
        Header:=xlNo, _
        OrderCustom:=1, _
        MatchCase:=False, _
        Orientation:=xlTopToBottom, _
        SortMethod:=xlPinYin

最初のRangeに
ヘッダーを含まない並び替える範囲を入れます。
3つKeyのRangeには
それぞれ列の並び替える範囲内の一番上のセルを入れます。
あとは3つKeyのOrderを
xlAscending か xlDescendingのどちらかにすればOKです。
Key2、Key3は不要ならその行を削除してください。

変更する箇所はこの画像を参考にしてください。
Vba20110205f

|

« 0以下は0に、その他はそのままにする | トップページ | 2次元配列をソートする »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: シートの並び替えをする:

« 0以下は0に、その他はそのままにする | トップページ | 2次元配列をソートする »