範囲をソートすると、行全体(値・スタイル・数式・罫線)が一緒に動きます。

単一キー
using unvell.ReoGrid.Core;
// 単一キー。行全体(値・スタイル・数式・罫線)が一緒に動く
int moved = ws.SortRange(RangePosition.Parse("A2:D100"), keyColumn: 1);
// 降順
ws.SortRange(RangePosition.Parse("A2:D100"), keyColumn: 1, SortOrder.Descending);
// 見出し行を含む範囲を渡す場合
ws.SortRangeWithHeader(RangePosition.Parse("A1:D100"), keyColumn: 1);
戻り値は移動した行数です。
SortRangeWithHeader は範囲の先頭行を見出しとして除外してからソートします。
見出しを含めずに範囲を指定できる場合は SortRange で構いません。
複数キー
// 優先順にキーを並べる。安定ソートなので同値の並びは保たれる
ws.SortRange(RangePosition.Parse("A2:D100"),
[
new SortKey(2, SortOrder.Ascending),
new SortKey(1, SortOrder.Descending),
]);
SortKey は列番号と方向を持つレコード構造体です。配列の順序が優先順位になります。
何が動くか
行全体が移動します。
| 移動するもの |
|---|
| セル値・数式 |
| スタイル・数値書式・リッチテキスト |
| 罫線 |
数式は文字列としてそのまま移動し、移動先の位置で再評価されます。 相対参照は移動に伴ってずれません(Excel と同じ)。
比較の順序
型付きの比較です。文字列として比較する実装ではないため、10 が 9 より後に来ます。
| 優先順(昇順の場合) |
|---|
| 1. 数値・日付・論理値(数値として比較) |
| 2. 文字列(大文字小文字を区別しない) |
| 3. エラー値 |
| 4. 空セル(常に末尾) |
空セルは降順でも末尾に置かれます。Excel と同じ挙動です。
フィルタとの関係
非表示の行はソート対象から除外されます。 フィルタで絞り込んだ状態でソートすると、 表示されている行だけが並び替えられます。
制限
- 結合セルを含む範囲はソートできません。 例外が送出されます。Excel と同じ制限です
元に戻す
ソートは履歴に載ります。control.Undo() で元の並びに戻せます。
UI から使う
コントロール側にヘルパがあります。
| メンバー | 内容 |
|---|---|
control.SortByActiveColumn(order) | アクティブセルの列でソート |
control.ShowCustomSortDialog() | 3 キーまで指定できるダイアログ |
オートフィルタのドロップダウンからもソートできます。