注目キーワード
  1. VBA
  2. 関数
  3. ショートカット

【VBA】Sortで表の並び替えを自動で行う方法【オブジェクトとメソッド】

  • 2019年3月29日
  • VBA
  • 146回
  • 0件
VBA NO IMAGE

ExcelやVBAで用意されているソート機能を知っていますか?

ソート機能とは表の中の数値のなどのデータを昇順や降順で列や行単位で並び替えができる機能です。

この記事ではVBAのSortメソッド・Sortオブジェクトを使って

昇順・降順での並び替え方法

複数の条件で並び替える方法

独自の順番で並び替える方法

色を基準にして並び替える方法を紹介します。

Excelのソート機能について

Excelでは、一定の形式で表のデータを入力していくことにより、並び替えやフィルターといったデータベース的な処理が行いやすくなります。

まず、表の1行目を見出し行にして、各セルにそれぞれの列の内容を表す列見出しを入力します。

2行目以降は1行に1件分のデータを入力して、住所禄の場合は「氏名」「年齢」「住所」「電話番号」などを

同じ行の各列の見出しの下に入力していきます。

Excelではこのような「リスト化」された表をたとえば、「年齢」を基準にして行単位ごと降順や昇順で並び替えることができます。

「Sortメソッド」で並び替える

Sortメソッドは指定する引数によって並び替えの設定を変更することができます。

下記の表が指定できる引数の一覧です。

引数 定数 説明
Key1 文字列、Rangeオブジェクトを指定します。
Order1 xlAscending 昇順に並び替える
xlDescending 降順に並び替える
Key2 2番目に優先される文字列,Rangeオブジェクトを指定します
Order2 xlAscending 昇順に並び替える
xlDescending 降順に並び替える
Key3 3番目に優先される文字列,Rangeオブジェクトを指定します
Order3 xlAscending 昇順に並び替える
xlDescending 降順に並び替える
Header xlGuess 先頭行をタイトル行か自動判定する
xlNo 先頭行をタイトル行と見なさない
xlYes 先頭行をタイトル行と見なす
OrderCustom
MatchCase TRUE 大文字・小文字を区別する
FALSE 大文字・小文字を区別しない
Orientation xlSortRows 上から下へ(行の並び替え)
xlSortColumn 左から右へ(列の並び替え)
SortMethod xlPinYin 日本語をふりがなで並び替え
xlStroke 日本語を文字コードで並び替え

RangeオブジェクトのSortメソッドで、対象のセル範囲を並び替えることができます。

すべての引数が省略可能で、省略した場合は既定値または前回の設定で並び替えられます。

Sortメソッドの書式はこのように記述します。

Rangeオブジェクト . Sort _  ’セルまたはセル範囲を指定する
Key 1 , Order 1 ,_ ‘並び替えの基準になるセルを指定し降順・昇順を設定する
Key 2 , Order 2 ,_ ‘並び替えの2番目に基準になるセルを指定し降順・昇順を設定する
Key 3 , Order 3 ,_ ‘並び替えの3番目基準になるセルを指定し降順・昇順を設定する
Header , _ ‘先頭行をタイトルとするか自動判定するか設定
OrderCustom ,_ ’ユーザー設定の並び替えを設定する
MatchCase ,_ ‘大文字・小文字を区別するか設定する
Orientation ,_  ‘上から下へ並び替えか(行の並び替え)右から左へ並び替え(列の並び替え)を設定する
SortMethod , ‘日本語をふりがなか文字コードかを設定する

「Sortメソッド」で昇順・降順で並び替える

表の左上端がA1セルの「リスト化」されたデータに対して大きい順に並び替える方法を紹介します。

下記のコードではA1を含む列に見出し行がある表に対してB2セル以下の値を基準に降順で並び替えています。

並び替える基準になるデータが入力されているセルをKey1に設定して引数Order1に降順(大きい順)を表す定数xlDescendingを指定します。

次に対象範囲の一行目を見出し行とみなすどうかを、引数Headerに定数xlYes(みなす)または定数xlNo(みなさない)で指定します。

Sub test ()
Range(“A1”) . Sort _
Key1 := Range(“B2”) ,_ ’並び替えの基準になるセルを指定
Order := xlDescending ,_ ‘並び替えに降順(大きい順)を指定
Header := xlYes ‘タイトルを見出し行とみなす、定数xlYesを指定
Sub End

「Sortメソッド」で複数の条件で並び替える

「商品一覧」などの表に商品分類が入力されている表に対して商品分類を並び替えして、

さらに価格順で並び替えをしたい場合などは引数Key2 やさらに引数Key3 を使って並び替えた後に

別の行の情報をもとにさらに並び替えする方法もあります。

次のコードでは引数Key1 で商品分類を並び替えしてさらに引数Key2 で価格順に並び替えしています。

Sub test()
Range(“B2”) . Sort_
Key1 := Range(“C3”) , _ ‘並び替えの基準に商品分類データが入力されているセルを指定
Order1 := xlAscending ,_ ‘昇順(小さい順)に並び替えを設定
Key2:=Range(“D3”) ,_ ‘並び替えの基準に価格データが入力されているセルを指定
Order2:=xlDescending ,_ ‘降順(大きい順)に並び替えを設定
SortMethod:=xlPinYin ’日本語をふりがなで並び替えを設定
End Sub

「Sortオブジェクト」で色を基準にして並び替える

Sortメソッドでは実行できなかった色を基準に並び替える処理はSortオブジェクトで実行可能になりました。

また、並び替える順番は、各キーに色を1つづつ指定していきます。

セルの色や、条件付き書式などを基準に並び替える操作は、WorksheetオブジェクトのSortプロパティで取得できる、
Sortオブジェクトを使用して、並び替えを実行できます。

並べ替えで使用するすべてのキーの設定はSortオブジェクトのSortFieldsプロパティで
SortFieldsコレクションとして取得できます。

新しいキーの設定は、SortFieldsコレクションのAddメソッドで、SortFieldオブジェクトとして追加します。

このメソッドの引数Keyには使用する列のセルを表すRangeオブジェクトを指定します。

引数SortOnには、並べ替えのキー属性を以下の定数で指定します。

定数 キーの属性
xlSortOnValues
xlSortOnCellColor セルの色
xlSortOnFontColor フォントの色
xlSortOnIcon セルのアイコン

次に引数Orderに降順・昇順の設定を定数で指定します。

引数SortOnに定数xlSortOnCellColorまた、定数xlSortOnFontColorを指定した場合は

SortFieldオブジェクトのSortOnValueプロパティで並び替えの条件となる

セルの塗りつぶしやフォントの設定を表すInteriorオブジェクトまたはFontオブジェクトを取得できます。

そのColorプロパティなどで対象の色を指定することができます。

また、SortFieldオブジェクトで表されるキーの設定は、別の設定で並び替えを行うかブックを閉じるまでそのまま保存されます。

次のコードでは最初にSortFieldsコレクションのClearメソッドを実行して、既存の設定をクリアして

並び替えの条件を2つ設定して、SetRangeメソッドの引数Rngで指定したセル範囲を並び替えの対象範囲として設定しています。
次にHeaderプロパティの引数xlYesで一行目を見出し行とみなし、SortオブジェクトのApplyメソッドで対象の並び替えを実行しています。

Sub test ()
With Active Sheet . Sort
.SortFilds . Clear
.SortFields . Add(key := Range(“B3”) ,_ ‘新しいSortオブジェクトを追加する
SortOn := xlSortOnCellColor , Oeder := xlAscendng ‘キーの属性をセルの色を指定
.SortOnValue . Color = rgbLightPink ‘薄いピンクを条件に指定する
End With
.SortFilds . Clear
With . SortFields . Add(key:=Range(“B3”) ,_  ‘新しいSortオブジェクトを追加する
SortOn := xlSortOnCellColor , Oeder := xlAscendng ‘キーの属性をセルの色を指定
.SortOnValue . Color = rgbLightBlue ’薄い水色を条件に指定する
End With
.SetRange Rng:=Range(“B2:F11”) ’並び替え対象を設定する
.Header := xlYes ’見出し行とみなす設定をする
.Apply ’並べ替えを実行する
End With
End Sub

「Sortオブジェクト」で独自の順番で並び替える

会社の役職名や部署など独自の順番で並び替えをする方法を紹介します。

日本語のふりがなや文字コードでソートする場合は、思い通りの順番で並び替えられない場合に効果的です。

次のコードでは引数CustomOrderに並び替えのデータを入力させて独自の順番で並び替えをしています。

Sub test ()
With Active Sheet . Sort
With . SortFields . Add(key:=Range(“C5:C12”) ,_  ‘新しいSortオブジェクトを追加する
SortOn := xlSortOnValues , Oeder := xlAscendng ’キーの属性を値に指定する
CustomOrder := “人事部,営業部,企画部,総務部”
.SetRange Rng:=Range(“B4:E12”) ’並び替え対象を設定する
.Header := xlYes ’見出し行とみなす設定をする
.Apply ’並べ替えを実行する
End With
End Sub

まとめ

今回は、Excelのソート機能とVBAのSortメソッドとSortオブジェクトについて紹介しました。

VBAでは表のデータを加工してさらに並び替えをするコードを記述する場合など連続して処理を実行する場合に
よく使用します。

並び替えのみならExcelのソート機能の方がコードを書くより早い場合もあるので状況に応じて使い分けましょう!

NO IMAGE
最新情報をチェックしよう!