本記事は、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 |
ピボットテーブル レポートをラベルで並べ替えます。 |
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 |
テキストを数値データとして並べ替えます。 |
サンプルコード
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);
下記例では、複数のキーを用いてソートする場合を示しています。
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 内のセルの色の値を取得し、その値を使用しています。
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";
s.Columns("A:C").Sort(Key1:s.Range("C2"), Order1:1, header:1);
s.Columns(3).ClearContents();