Excelの操作を解説した某サイトをたまたま見ていたら、こんなことが書いてありました。
「エクセルの並び替えで注意をしなければいけないのは、・・・縦方向に並び替えはできるが、横方向に並べ替えはできない」うんぬん。
「エクセルの並び替えで注意をしなければいけないのは、・・・縦方向に並び替えはできるが、横方向に並べ替えはできない」うんぬん。
あれ・・・?できるのに。たしかにわかりづらいですが。
たとえばこんな表があったといたします:
売上データについて、縦方向に商品別・横方向に取引先別に集計がされています。
縦方向はC列の売上数順でソートされていますが、横方向は1行めの取引先名順になっちゃってます。
これを2行目の売上数順で左から右にソートしたいといたします。
縦方向はC列の売上数順でソートされていますが、横方向は1行めの取引先名順になっちゃってます。
これを2行目の売上数順で左から右にソートしたいといたします。
まず並べ替えをする範囲全体を選択:
次にメニューのデータ→並べ替えを選択して「並べ替え」の画面を表示させます。
そして左下にある「オプション」というボタンをクリック。
すると、さらに「並べ替えのオプション」という画面が表示されます(図はExcel2002)。
そして左下にある「オプション」というボタンをクリック。
すると、さらに「並べ替えのオプション」という画面が表示されます(図はExcel2002)。
ここで「方向」の項目を「列単位」に変更してOK。
※ちなみにExcel2007の場合は下のような画面です。同じように「オプション」をクリックします。
「並べ替え」の画面に戻ると「最優先されるキー」の表示が変わっています。
表の2行目で並べ替えたいので「行2」を選択、多い順にしたいので「降順」を選択してOK。
表の2行目で並べ替えたいので「行2」を選択、多い順にしたいので「降順」を選択してOK。
横方向の並べ替え完了です:
ところで、これをVBAでやる時にひとつ注意することがあります。
上の「列単位」は、SortメソッドのOrientationというオプションで指定します。
これについてマイクロソフトは次のように説明しています。
上の「列単位」は、SortメソッドのOrientationというオプションで指定します。
これについてマイクロソフトは次のように説明しています。
Orientation 省略可能です。XlSortOrientation クラスの定数を使用します。並べ替えの方向を指定します。
使用できる定数は、次に示す XlSortOrientation クラスの定数のいずれかです。
xlSortRows 既定値。行単位で並べ替えます。
xlSortColumns 列単位で並べ替えます。
(2002のヘルプより)
使用できる定数は、次に示す XlSortOrientation クラスの定数のいずれかです。
xlSortRows 既定値。行単位で並べ替えます。
xlSortColumns 列単位で並べ替えます。
(2002のヘルプより)
ところが上の操作をマクロの記録機能でトレースしてみると・・・
列単位の並べ替えは「xlSortColumns」ではなく「xlLeftToRight」という定数で記録されます。
行単位の並べ替えは「xlSortRows」ではなく「xlTopToBottom」。
まあ、そっちの方がわかりやすいですがw
列単位の並べ替えは「xlSortColumns」ではなく「xlLeftToRight」という定数で記録されます。
行単位の並べ替えは「xlSortRows」ではなく「xlTopToBottom」。
まあ、そっちの方がわかりやすいですがw
いちおうxlSortRows・xlSortColumnsという定数も存在はしていて、値が割り当てられています。
ところが、その値がおかしい:
ところが、その値がおかしい:
どうも逆に割り当てられている模様。それで別の定数を作ったってことなのかもしれません。
実はこの間違い、以前から知られてるんですがMSDN見たらいまだに同じ説明になってました:
実はこの間違い、以前から知られてるんですがMSDN見たらいまだに同じ説明になってました:
直さねーのかしら(^ω^;)
とりあえず、xlTopToBottom・xlLeftToRightを使っておけば間違いないようです。
とりあえず、xlTopToBottom・xlLeftToRightを使っておけば間違いないようです。