Excel VBA スタンダード

Excel VBA スタンダードの暗記項目まとめ【第七章 データの並べ替え】

この記事では、VBAエキスパートの「Excel VBA スタンダード」の受験用に、暗記すべき項目について、公式の試験範囲の第七章をまとめました

とくに暗記すべきところは「太文字」や「」でまとめてあります。とくにステートメントやメソッド、プロパティについては、記述できるレベルまで仕上げておくことをおすすめします。

この記事では暗記を優先するため、解説をできるだけ省いています。学習未経験の人は、Excel VBA スタンダードの公式テキストなどで試験範囲の内容に目を通してからの利用を推奨します。

また、公式テキストに掲載されていないなど、試験に出る可能性の低い内容の解説は、基本的に割愛しています。

Excel VBA スタンダード 第七章 データの並べ替え(2019年5月改訂で追加された範囲)

7.1 簡単な条件の並べ替え(2019年5月改訂で追加)

Sortメソッド(Excel2003以前からの方法)

Sortメソッドは、Excel2003以前から利用できる並び替えの方法です。

最低限必要な引数を利用した記述としては「並び替え対象のセル範囲.Sort Key1, Order1, Header」の形になり、実際に利用する例は以下の通りです。

Sub sort_age()
    Range("A1").Sort key1:=Range("C1"), Order1:=xlDescending, Header:=xlYes
End Sub

 

VBAのSortメソッドでソートした例

例では、セルA1を含む表に対して、C列(年齢)を降順でソートするように指定しています。実行結果は、図のようになります。

引数の内、Order1はデフォルトでは「xlAscending」(昇順)と同じになります。一方、Headerは省略すると、直前に手動で実行した方法と同じになってしまうため、省略は非推奨です(直前の操作によって、想定外の動作をする可能性があるので)。

ちなみに、基本的に戻り値を使わないため、引数を()で囲む必要はありません(Excel VBA スタンダードでは問われない知識だと思いますが…)。

Order1、Headerに指定できる内容で、Excel VBA スタンダードで暗記すべき内容は以下のとおりです。

引数Order1で暗記すべき定数

  • xlAscending:数値では1。昇順でソートする際に利用。規定値。
  • xlDescending:数値では2。降順でソートする際に利用。

引数Headerで暗記すべき定数

  • xlGuess:数値では0。Excelが自動判定。規定値。
  • xlYes:数値では1。1行目をタイトル行として扱う。
  • xlNo:数値では1。1行目をタイトル行として扱わない。

ソートに登場する定数について(初心者向けにちょっと脱線)

先に紹介したSortメソッドで登場した「Order1」や「Header」では「xlAscending」や「xlNo」という値が登場しました。

これらの文字は「1」や「2」などの数値をわかりやすく表した定数です。ですので、以下のように数値で「1」になる「xlAscending」の部分を「xlYes」に置き換えても、想定通りにマクロは動作します。

Range("A1").Sort key1:=Range("C1"), Order1:=xlYes, Header:=xlYes

 

ただし、読んだときに意味不明なコードになるので、そのような置き換え行わない方がいいでしょう。

7.2 複雑な条件の並べ替え(2019年5月改訂で追加)

SortオブジェクトとSortFieldオブジェクト(Excel2007以降で使える方法)

Excel2007以降では、並び替え機能が拡張されました。具体的には「並び替えに使えるキーが64個になった」ところと「並び替えに書式を利用できるようになった」ところです。

その機能拡張に伴い、新しく拡張されたのがSortオブジェクトSortFieldsオブジェクトです。大雑把にいえば、Sortオブジェクトが並び替えの挙動を指定して実行するオブジェクト。SortFieldsオブジェクトは並び替えの条件を指定するオブジェクトです。

実際に、Excel2007以降(私の環境は2013になります)で、マクロの記録で並び替えの動作を記録してみると、以下のようになります。

Sub Macro1()
    ActiveWorkbook.Worksheets("動物園").sort.SortFields.Clear
    ActiveWorkbook.Worksheets("動物園").sort.SortFields.Add Key:=Range("A1"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("動物園").sort
        .SetRange Range("A2:C9")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

 

上のコードで、2~4行目がSortFieldsオブジェクトです(公式テキストではSortFieldオブジェクトとして解説されていますが、厳密にはSortFieldsオブジェクトとSortFieldオブジェクトは別物です)。一方、5~12行目Sortオブジェクトの操作部分となっています。

SortFieldsオブジェクトのメソッド

SortFieldsオブジェクトで暗記すべきメソッドは、先の「Clear」と「Add2」です。「Clear」で既存の条件を削除してから、「Add2」で並び替えの条件を決定する流れで利用します(他にAddメソッドがありますが、公式テキストで登場しません)。

記述は「Sheets(“シート名”).Sort.SortFields.メソッド名」の形となります。

また「Add2」では、先にあげた例のように条件を指定する引数が必要です。Excel VBA スタンダードでは「SortOn」「Order」「DataOption」に指定できる定数はおさえておきましょう

SortOnで覚えておくべき定数

  • xlSortOnValues:数値では0。データで並び替える。規定値。
  • xlSortOnCellColor:数値では1。セルの背景色で並び替える。
  • xlSortOnFontColor:数値では2。文字色で並び替える。
  • xlSortOnIcon:数値では3。条件付き書式のアイコンで並び替える。

Orderで覚えておくべき定数

  • xlAscending:数値では1。昇順でソートする際に利用。規定値。
  • xlDescending:数値では2。降順でソートする際に利用。

DataOptionで覚えておくべき定数

  • xlSortNormal:数値では0。数値と文字列を別々に並び替える。規定値。
  • xlSortTextAsNumbers:数値では1。文字列を数値と見なそいて並び替える

実際に記述する場合は、以下のようになります(長いので「_」を使って改行しています)。

Worksheets("Sheet1").sort.SortFields.Add2 Key:=Range("A1"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal

Sortオブジェクトのプロパティとメソッド

Sortオブジェクトで覚えるべきプロパティは「Header」「MatchCase」「Orientation」「SortMethod」です。

このうち「MatchCase」は大文字小文字の区別をする場合はTrue、区別しない場合はFalseとします。

残り3つのプロパティには、それぞれ定数があり、以下のようになります。

Headerで覚えておくべき定数

  • xlGuess:数値では0。Excelが自動で判断。規定値。
  • xlYes:数値では1。1行目をタイトルとして扱う
  • xlNo:数値では2。1行目をタイトルとして扱わない

引数Orientationで覚えておくべき定数

  • xlTopToBottom:数値では1。上下に並び替える。規定値。
  • xlLeftToRight:数値では2。左右に並べ替える

引数SortMethodで覚えておくべき定数

  • xlPinYin:数値では1。並べ替えにふりがなを使う。規定値。
  • xlStroke:数値では2。並べ替えに文字コードを使う。

Sortオブジェクトで覚えるべきメソッドは「SetRange」と「Apply」です。「SetRange」は並び替えの範囲の指定、「Apply」は実際に並び替えを実行するメソッドです。

実際に記述する際は、withステートメントを利用して、以下のように記述します。

With ActiveWorkbook.Worksheets("動物園").sort
    .SetRange Range("A2:C9")
    .Header = xlNo
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

 

Sortオブジェクトのプロパティとメソッドは、Withステートメントと一緒に登場する可能性が高いです。

記述の際は「.SortMethod」「.Apply」のように「.」を忘れないように気を付けましょう。

7.3 特殊な条件の並べ替え(2019年5月改訂で追加)

公式の試験範囲に「特殊な条件の並び替え」というものがあるのですが…「複雑な条件の並び替え」との差が不明瞭でした。

公式テキストでも言及されていないため、「複雑・特殊」と思えるものは、全て「7.2 複雑な条件の並び替え」に掲載しましたので、この節の解説は省きます。

7.4 文字列の並べ替え(2019年5月改訂で追加)

漢字を並び替える場合、漢字のふりがなを利用します。

漢字のふりがなは文字を変換する際に設定されます。また、下の図のようにExcelの「ふりがなの編集」機能を使っても編集することが可能です。

Excelでふりがなの編集をする例また、他のアプリケーション上の漢字をコピーし、Excelに張り付けた場合、ふりがなは設定されません。ふりがなが設定されていな場合のソートは、文字コード順になるため、昇順で並べ替えると、ふりがなのある文字よりも後に並ぶようになります。具体的には、下の図のとおりです。

Excelでふりがなの無い文字も含めて並び替えをした例

7.5 フリガナの操作(2019年5月改訂で追加)

VBAでセルのフリガナを表示する場合は、Rangeオブジェクトのプロパティである「Phoneticプロパィ」を使います。

上の図の例で「MsgBox Range(“B9”).Phonetic.Text」としてマクロを実行した場合、B9のセルにある文字(ふりがなの無い部分含む)をカタカナで表示します(下の図のようになります)。

Phoneticを利用した例

また、ふりがなを設定する場合は

「Range(“B9”).Phonetic.Text = “ニンゲンドリル”」

のように、Textに代入することが可能です。ただし、文字列部分を「””」として代入しても、ふりがなを削除することはできません

 


<<第六章 セルの検索とオートフィルターの操作へ | 第八章 テーブルの操作へ>>

Excel VBA スタンダードの暗記項目まとめ一覧へ