条件付きスタイル

Excelの条件付き書式とほぼ同様に動作できる機能です。ただし、Excelでは条件を満たしているセルのスタイルと書式を設定できますが、ReoGridではスタイルにも対応しています。条件によって書式を適用することができません。

条件

条件(Rule)の作成

Rule は数式、適用範囲と適用スタイルによって作成できます。

var rule1 = new Rule("THIS > 1000", "A1:Z30", new WorksheetRangeStyle
{
    Flag = PlainStyleFlag.TextColor,
    TextColor = SolidColor.Yellow,
};

条件の追加

ワークシートの ConditionalStyles プロパティは条件を管理するためのコレクションです。 このコレクションに追加した条件は、自動的に適用されます。

sheet.ConditionalStyles.Add(rule1);

条件の削除

sheet.ConditionalStyles.Remove(rule1);

条件の一時停止

条件の Disabled プロパティを true に設定すると、条件が一時停止されます。

rule1.Disabled = true

条件となる数式

セルで使える数式は条件として利用できます。

大小比較

比較数式記述例
以上>=THIS >= 1000
以下<=THIS <= 1000
より大きい>THIS > 1000
より小さい<THIS < 1000
等しい=THIS=5
等しくない<>THIS<>10

THISキーワード

THIS キーワードは ReoGrid のキーワードです(Excelで利用できません)。 THIS キーワードは条件数式が適用されているセル、そのセルの値を取得するためのキーワード。Excelははセルの相対オフセットでセル値を取得しているに対して、 THIS キーワードはよりわかりやすく、直感的に数式を書けるように設計されています。

例えば、 A1 セルに =A1 数式を適用する場合、 A1 セルに =THIS 数式を適用することと同じ結果となります。複数のセルに同じ =THIS 数式を適用でき、アプリケーションでよりわかりやすく、便利に条件付きスタイル機能を利用することができます。

COLVAL関数

COLVAL 関数はセルと同じ行にある他の列のセルの値を取得できます。

例えば、 該当数式が適用しているセルのB列(通貨列)の値を取得し、 USD 以外であるかどうかを判別する数式を以下のように記述します。

COLVAL(B) <> "USD"

COLVAL関数は、 THIS キーワードと同様に、数式を適用しているセルの座標がわからなくても、近隣のセルや列の値を便利に取得できる関数です。

COLVALのパラメータは4つの方式で指定できます。

列のアドレスで指定

COLVAL(B) または COLVAL(AH)B 列または AH 列を表します。

COLVAL(B) = "買"

列のインデックスで指定

COLVAL(2) は 3列目を表します(0ベス)。

AND(COLVAL(2) = "USD", COLVAL(4) < 10)

列のIDで指定

列ベースデータソースでデータをワークシートに追加した場合、列ベースデータソースの列IDを文字列で指定できます。 データセットが複数ある場合、列IDが含まれる一つ目のデータソースが対象となります。

例えば、科目列の値が 11 の数式を以下のように記述できます。

COLVAL("kamoku") = 11

相対位置で列を指定

COLVAL 関数に THIS キーワードを渡すと、現在のセルから相対位置を計算して値を取得できます。

例えば、「現在のセルの値は一つ左の列の値より大きい」という数式を以下のように記述できます。

THIS > COLVAL(THIS - 1)

CIDVAL 関数

CIDVAL 関数は列IDで列を指定してその列の値を取得する関数です。 COLVAL("") と同じ効果の関数で、 COLVAL は列IDを文字列で指定しますが、 CIDVAL 関数は列IDをキーワードとして記述できます。

CIDVAL(kamoku)

意味は

COLVAL("kamoku")

と同様です。文字列文法のダブルクォーテーションを省略できます。

ROWVAL 関数

ROWVAL 関数は COLVAL 関数の行に対する関数で、相対行のセルの値を取得できます。

条件の優先順位

同じセルに複数の条件がある場合、以下のルールで演算されます。

  • 同じスタイルが指定された場合、あとに追加した条件のスタイルが採用されます(あと勝ち)
  • 違うスタイルが指定された場合、条件が満たしたすべてのスタイルが適用されます

スタイルプロパティの優先度について

ReoGridでさまざまな方法でセルのスタイルを指定した場合、スタイルプロパティの優先順位は以下の通りです。

コンポーネントスタイル(すべてのセルの共通色) > 縞々模様スタイル > セルスタイル > 集約行スタイル > 条件付きスタイル 
低  →  高

右側にあるスタイルが優先に採用されます(左側のスタイルプロパティが上書きされます)。

パフォーマンスについて

データが変更された際に、すべての条件の数式が再評価されます。 ワークシートの初期化や、大量のセルのデータを更新する場合、条件書式の評価に時間がかかることがあります。 アプリケーションではこの点を配慮し、データのローディング前に条件付きスタイルを適用するより、データの準備完了後に条件付きスタイルを適用したほうが、パフォーマンスが高くなります。

また、データを頻繁に変更する間、条件付きスタイルを一時停止することによって、パフォーマンスを向上することもできます。

ワークシートのプロパティ SuspendConditionalStyleUpdatetrue に設定すると、 条件付き書式機能が一時オフとなります。

sheet.SuspendConditionalStyleUpdate = true

... ワークシート初期化 ...

sheet.SuspendConditionalStyleUpdate = false

設定中の条件付きスタイルの強制再適用

セルの変更があった場合、条件付きスタイルはほぼ自動的に動作します。 何かしらの原因で動作しない場合、 条件付きスタイルを強制適用することができます。 また、条件付きスタイルを一時停止する場合、手動で条件付きスタイルを適用したい場合、以下のメソッドを利用します。

sheet.ApplyAllConditionalStyles()

条件付きスタイルサンプル例

売買区分が「買」の場合、行データの背景色を設定します。

var rule1 = new Rule("CIDVAL(baibai)=\"\"", "A1:Z30", new WorksheetRangeStyle
{
    Flag = PlainStyleFlag.BackColor,
    BackColor = SolidColor.DarkOrchid,
});

sheet.ConditionalStyles.Add(rule1);

Conditional Styles

その他の例

B列(通貨)がUSDの場合、文字テキストを黄色に設定し、太字にします。

sheet.ConditionalStyles.Add(new Rule("COLVAL(B)=\"USD\"", "A1:Z30", new WorksheetRangeStyle
{
    Flag = PlainStyleFlag.TextColor | PlainStyleFlag.FontStyleBold,
    TextColor = SolidColor.Yellow,
    Bold = true,
}));

セル値が 2000 より大きい場合、テキスト色を赤にします。 この条件と上の条件、両方とも満たす場合、上の条件のテキスト色が上書きされ、「太字+赤色」のスタイルとなります。

sheet.ConditionalStyles.Add(new Rule("THIS > 2000", "A1:Z30", new WorksheetRangeStyle
{
    Flag = PlainStyleFlag.TextColor,
    TextColor = SolidColor.Red,
}));

負数のスタイル

条件が満たして、さらにセルの数値がマイナスの場合、特別なスタイルを指定することができます。

sheet.ConditionalStyles.Add(new Rule("THIS > 500", "E1:E200", new WorksheetRangeStyle
{ 
    Flag = PlainStyleFlag.TextColor,  // 通常のスタイル
    TextColor = SolidColor.Red,
}, new WorksheetRangeStyle
{
    Flag = PlainStyleFlag.BackColor,  // 負数スタイル
    BackColor = SolidColor.Yellow,
}));