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

上期(B 列)の昇順に並べ替えた結果。行全体が移動している

単一キー

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 と同じ)。

比較の順序

型付きの比較です。文字列として比較する実装ではないため、109 より後に来ます。

優先順(昇順の場合)
1. 数値・日付・論理値(数値として比較)
2. 文字列(大文字小文字を区別しない)
3. エラー値
4. 空セル(常に末尾

空セルは降順でも末尾に置かれます。Excel と同じ挙動です。

フィルタとの関係

非表示の行はソート対象から除外されます。 フィルタで絞り込んだ状態でソートすると、 表示されている行だけが並び替えられます。

制限

  • 結合セルを含む範囲はソートできません。 例外が送出されます。Excel と同じ制限です

元に戻す

ソートは履歴に載ります。control.Undo() で元の並びに戻せます。

UI から使う

コントロール側にヘルパがあります。

メンバー内容
control.SortByActiveColumn(order)アクティブセルの列でソート
control.ShowCustomSortDialog()3 キーまで指定できるダイアログ

オートフィルタのドロップダウンからもソートできます。

次に読む

ページの内容は役に立ちましたか?