Excel VBAエキスパート体験記18(Sortオブジェクト)

VBAエキスパート

前回はExcel VBAエキスパートスタンダードのFindメソッドについて勉強しました。
前回までの記事はこちら

今回は7章のSortオブジェクトについてレポートしていきます。

なお今回も一部動画を使って説明しようと思います。イメージをつかんでくだされば幸いです。

なお理解が間違っているところもあるかもしれませんがわからない人と同じ視点に立てるのは今しかないので細かいところはご容赦ください。
間違えに気づいたら修正していきます(笑)。
 

<今回の目的>

Sortオブジェクトを理解する

今回の勉強方法
  1. 7章を精読する
  2. Sortオブジェクトをわかりやすく説明する
スポンサーリンク

結論

いきなりですが結論です。

Sortメソッドのコードは実際の検索操作をやれば理解できる。

以下の図2枚を理解すればよい

Excel2007以降

Excel2003まで

次から詳しく説明します。

なぜExcel2007以降と2003までで分かれるのか?

これはExcel2007以降で機能が拡張されたことによるものです。実際の画面も以下のように変わっています。

Excel2007以降

Excel2003

大きな違いは並べ替えに指定できる数の違いです。Excel2003では上のように3つまでですがExcel2007では64個まで増えています。

ちなみに64個以上にしようとするとレベルの追加スイッチが非活性化されます。

(そんなに条件を増やしたいという要望でもあったんでしょうか)

その為Excel2007とExcel2003まではVBAのコードの書き方も変わります。

以降でそれぞれについて説明します。

コードの説明(Excel2007以降)

データの並び替えの機能を実装しているのはSortオブジェクトとSortFieldオブジェクトです。
それぞれのコードは以下のようになります。

Sheetオブジェクト.Sort.プロパティ or メソッド

Sheetオブジェクト.Sort.SortFields.Add Key:=・・・・

このコードは以下の手動操作の自動化を表しています。
1 ワークシートを選択する
2 メニューバーのホームタブの並べ替えとフィルター→ユーザー設定の並べ替えをクリックする
3 最優先されるキーなどを入力する
4 必要に応じてオプションで各項目を設定する

詳しくは以下の動画を確認ください。

これがそれぞれ以下になります。

1 ワークシートを選択する⇒これがSheetオブジェクト
2 メニューバーのホームタブの並べ替えとフィルター→ユーザー設定の並べ替えをクリックする⇒これがSortオブジェクトの表示
3 最優先されるキーなどを入力する⇒これがSortFieldsコレクションのAddメソッド
4 必要に応じてオプションで各項目を設定する⇒これがSortオブジェクトの各プロパティ


前回までのAutoFilterメソッド、Findメソッド同様行っている操作を順次コードにしているだけですね。

理解するのには手動でやってみるのがおすすめです。

コードの詳細

先ほどの説明を図にすると以下のようになります。

まずワークシートの選択を行います。
その後Sortオブジェクトを選択します。SortFieldオブジェクトも同時にでてきます。

並べ替えの大きな項目がSortオブジェクト、並び替えの条件を指定する場所がSortFieldオブジェクトになります。

Sortオブジェクト

Sortオブジェクトのメソッド、プロパティの表示は以下になります。
多くはオプションに含まれる項目ですが右にはHeaderプロパティもあります。

なお具体的な値等の詳細は以下になります。

メソッド備考
SetRangeRange(“A9”)で並び替え範囲を指定する
Apply並べ替え条件を適用する
プロパティ備考
HeaderxlGuess:エクセルが自動判定
xlYes:1行目はタイトル行
xlNo:1行目はタイトル行ではない
MatchCaseTrue:大文字と小文字を区別する
False:大文字と小文字を区別しない
Findメソッドの引数と同じ
OrientationxlTopToBottom:上下に並べ替える
xlLeftToRight:左右に並べ替える
SortMethodxlPinYin:日本語をふりがなで並び替える
xlStroke:日本語をコードで並び替える

ポイントはエクセルの機能の為xlがつくということとチェックボタンの場合はYesNoになることです。

SortFieldオブジェクト

SortFieldオブジェクトのメソッド、引数は以下になります。

なお具体的な値等の詳細は以下になります。

メソッド内容備考
Add並び替え条件を追加します
Clear並べ替え条件をクリアします
Addメソッド
引数
備考
KeyRangeオブジェクトで列を指定セルを指定するとその列が基準になる
SortOnxlSortOnValues:セル内のデータで並べ替える
xlSortOnCellColor:セルの背景色で並べ替える
xlSortOnFontColor:セルの文字色で並べ替える
xlSortOnIcon:条件付き書式のアイコンで並べ替える
既定値はxlSortOnValueds
OrderxlAscending:昇順
xlDescending:降順
既定値はxlAscending
DataOptionxlSortNormal:数値と文字列を別々に並び替える
xlSortTextAsNumbers:文字列を数値とみなす
既定値はxlSortNormat

ポイントはエクセルの機能の為xlがつくということとチェックボタンの場合はYesNoになることです。

テキストには非常に多くのメソッド、プロパティ、引数がでてきます。
覚えるのがすごく大変そうに思いますが書かれているのはあくまでエクセルの機能上の条件です。


最終的なテスト対策としてはすべてを覚える必要があるのかもしれませんが実際に操作をしてみるとわかりやすくなると思います。

実際並べ替え手順

実際の並び替えではSortオブジェクト、SortFieldオブジェクト両方を使うことになります。
なおこれらを使った並び替えの手順は以下になります。

1 SortFieldオブジェクトで「条件の指定」を行う

2 Sortオブジェクトで「並べ替えの実行」を行う
その為順序はSortFieldオブジェクト⇒Sortオブジェクトになります。

並び替えのクリアも入れると具体的には以下の順になります。

1 SortFieldオブジェクトで条件をクリアする

2 SortFieldオブジェクトで条件を指定する

3 Sortオブジェクトで並べ替えを実行する

コードの説明(Excel2003)

Excel2003まででデータの並び替えの機能を実装しているのはSortメソッドでした。
コードは以下のようになります。

並べ替えるセル範囲.Sort Key1, Order1, Key2, Order2, Key3, Order3, Header

Keyは3つまでありますが2つ目以降は同じなので以降では省略します。

このコードは以下の手動操作の自動化を表しています。
1 セル範囲を選択する⇒セル範囲
2 メニューバーの[データ]→[並べ替え]をクリック⇒これがSortメソッド
3 [並べ替え]ダイアログボックス内で条件を指定⇒これがSortメソッドの各引数

図で表すと以下のようになります。

それぞれの引数は以下のようになります。

引数備考
Key1Rangeオブジェクトで列を指定Excel2007のSortObject.Addメソッドの引数と同じ
Order1xlAscending:昇順
xlDescending:降順
Excel2007のSortObject.Addメソッドの引数と同じ
HeaderxlGuess:エクセルが自動判定
xlYes:1行目はタイトル行
xlNo:1行目はタイトル行ではない
Excel2007のSort.Headerプロパティと同じ

それぞれの引数はExcel2007でも出てきたものと同じです。

コード例

例として以下のF列に対して値で昇順で並べ替えをするとします。対象範囲はA1:F10としてヘッダー行があるとし、列方向に並べ替えを実施しました。

Sub DataSort()
  
 With Worksheets("Sheet1").Sort
  .SortFields.Clear
  .SortFields.Add _
    Key:=Worksheets("Sheet1").Range("F2"), _
    SortOn:=xlSortOnValues, _
    Order:=xlAscending
  .SetRange Range("A1:F10")
  .Header = xlYes
  .Orientation = xlTopToBottom
  .Apply  
 End With
End Sub

結果としてF列をもとに並び替えられた表が得られました。

なお私がミスを犯したところは

1 SetRangeのRangeオブジェクトの書き方1 SetRangeのRangeはRangeオブジェクトとは異なるのでそのまま(“A1:F10”)と書いてはいけない

2 SetRangeのRangeオブジェクトの書き方2 Rangeオブジェクトは並び替えを行う範囲全体を示す必要がある(F列だけを並び替えるわけではないので)

3 .Apply 最後に実行の.Applyを入れることを忘れずに

ここでのまとめ

Sortメソッドのコードは実際の検索操作をやれば理解できる。

図2枚を理解すればよい

です。Excel2003の方法はテキストに出ているので勉強しています。
実務ではもはや必要ないでしょうね。

コメント

タイトルとURLをコピーしました