本記事は、Excel C# Script入門講座の1記事です。
ソート
Excelのソート機能を利用するには、ソートしたい範囲を示すRangeオブジェクトを用意し、当該RangeオブジェクトのSortメソッドを使用します。引数により昇順、降順などを指定できます。
※ Excel2007以降では、Sortメソッドに代えて、RangeオブジェクトにSortオブジェクトが用意されています。Sortオブジェクトの方が、オプションが豊富に用意されています。
Sortメソッドの構文
(Rangeオブジェクト).Sort(Key1, Order1, Key2, Type, Order2, Key3, Order3, Header, OrderCustom, MatchCase, Orientation, SortMethod, DataOption1, DataOption2, DataOption3)
Sortメソッドの戻り値
何かが返ってくるが、使うことはないと思われる(未調査)。
Sortメソッドの引数
引数名 | 必須 / オプション | 内容 |
---|---|---|
Key1 | 省略可能 | 最初の並べ替えフィールドを指定します。 |
Order1 | 省略可能 | Key1で指定した値の並び替え順序を指定します。 |
Key2 | 省略可能 | 2番目の並べ替えフィールドを指定します。 |
Type | 省略可能 | 並べ替え基準にする要素を指定します。 |
Order2 | 省略可能 | Key2で指定した値の並び替え順序を指定します。 |
Key3 | 省略可能 | 3番目の並べ替えフィールドを指定します。 |
Order3 | 省略可能 | Key3で指定した値の並び替え順序を指定します。 |
Header | 省略可能 | 最初の行にヘッダー情報が含まれているかどうかを指定します。 |
OrderCustom | 省略可能 | ユーザー設定の並べ替え基準を指定します。 |
MatchCase | 省略可能 | 大文字小文字の区別を行うか指定します。 |
Orientation | 省略可能 | 並べ替えを列単位で行うか、行単位で行うかを指定します。 |
SortMethod | 省略可能 | 並べ替えの方法を指定します。 |
DataOption1 | 省略可能 | Key1 で指定した範囲でテキストを並べ替える方法を指定します。 |
DataOption2 | 省略可能 | Key2 で指定した範囲でテキストを並べ替える方法を指定します。 |
DataOption3 | 省略可能 | Key3 で指定した範囲でテキストを並べ替える方法を指定します。 |
引数Key1, Key2, Key3
Rangeオブジェクトまたは文字列(範囲名かピボットテーブル名)で指定します。
Key2, Key3については、ピボットテーブルレポートを並び替える場合には使用できません。
引数Order1, Order2, Order3
XlSortOrder 列挙型を指定します。
名前 | 値 | 説明 |
---|---|---|
xlAscending | 1 | 指定したフィールドを昇順で並べ替えます。(デフォルト値) |
xlDescending | 2 | 指定したフィールドを降順で並べ替えます。 |
引数Type
XlSortType 列挙型を指定します。
この引数は、ピボットテーブル レポートを並べ替えるときにだけ使用します。
名前 | 値 | 説明 |
---|---|---|
xlSortValues | 1 | ピボットテーブル レポートを値で並べ替えます。 |
xlSortLabels | 2 | ピボットテーブル レポートをラベルで並べ替えます。 |
引数Header
XlYesNoGuess列挙型を指定します。
名前 | 値 | 説明 |
---|---|---|
xlGuess | 0 | 見出しがあるかどうか、ある場合はその場所を Excel が自動判定します。 |
xlYes | 1 | 範囲全体が並べ替えられません。 |
xlNo | 2 | 範囲全体が並べ替えの対象になります。 (デフォルト値) |
引数OrderCustom
『ユーザー設定リストの何番目』の基準を用いるかを整数値で指定します。
ユーザー設定の並べ替え基準は、あらかじめユーザー設定リストに登録されているものしか使えません。
引数MatchCase
true の場合、大文字と小文字を区別して並べ替えを行います。false の場合、大文字と小文字を区別しないで並べ替えを行います。
この引数は、ピボットテーブルの並べ替えには使用できません。
引数Orientation
XlSortOrientation 列挙型を指定します。
名前 | 値 | 説明 |
---|---|---|
xlSortColumns | 1 | |列単位で並べ替えます。 |
xlSortRows | 2 | 行単位で並べ替えます。(デフォルト値) |
引数SortMethod
XlSortMethod 列挙型を指定します。
名前 | 値 | 説明 |
---|---|---|
xlPinYin | 1 | 中国語の発音表記の順で並べ替えます。(デフォルト値) |
xlStroke | 2 | 各文字の総画数で並べ替えます。 |
引数DataOption1, DataOption2, DataOption3
XlSortDataOption 列挙型を指定します。
名前 | 値 | 説明 |
---|---|---|
xlSortNormal | 0 | 数値データとテキスト データを別々に並べ替えます。(デフォルト値) |
xlSortTextAsNumbers | 1 | テキストを数値データとして並べ替えます。 |
サンプルコード
//Sheet1のセル範囲"A1:B100"を、2列目をキーにして昇順にソートする Excel.Worksheets("Sheet1").Activate(); var range = Excel.Worksheets("Sheet1").Range(Cells(1, 1), Cells(100, 2)); range.Sort(Key1:Worksheets("Sheet1").Cells(1, 2), Order1:xlAscending);
下記例では、複数のキーを用いてソートする場合を示しています。
//セル範囲"A1:C100"を1列目は降順、2列目は昇順、3列目は降順にソート var range = Excel.Worksheets("Sheet1").Range(Cells(1, 1), Cells(300, 3)); var col_1 = Excel.Worksheets("Sheet1").Cells(1, 1); var col_2 = Excel.Worksheets("Sheet1").Cells(1, 2); var col_3 = Excel.Worksheets("Sheet1").Cells(1, 3); range.Sort(Key1:col_1, Order1:2, Key2:col_2, Order2:1, Key3:col_3, Order3:2);
下記例では、列Aに並んでいる色をSortメソッドで並べ替えます。
ソートを行うにあたっては、ColorIndex プロパティを使用して、列 A 内のセルの色の値を取得し、その値を使用しています。
//A列の色の 値(ColorIndex)をC列に表示 var s = Excel.ActiveWorkbook.ActiveSheet; for(var i = 2; i < 11; i++) { s.Cells(i, 3).Value = s.Cells(i, 1).Interior.ColorIndex; } s.Range("C1").Value = "Index"; //Phase1 //C列を基準にA~C列の範囲を並べ替え s.Columns("A:C").Sort(Key1:s.Range("C2"), Order1:1, header:1); //Phase2 //C列を削除 s.Columns(3).ClearContents();