Top > OOoBasic > Calc > conditionalformat

条件付書式設定 Edit

条件付書式設定を使用します。

条件付書式の利用 Edit

条件付書式設定はセル,セル範囲,シートオブジェクトで使用することができます。条件付書式設定はこれらのオブジェクトの ConditionalFormat プロパティーで設定することができます。

Sub conditionalformat_1
Dim oSheet As Object, oCelRange As Object
Dim oConditionalFormat As Object

  oSheet = ThisComponent.Sheets( 0 )
  oCellRange = oSheet.getCellRangeByPosition( 0, 0, 2, 3 )
  oConditionalFormat = oCellRange.ConditionalFormat  '--
End Sub

上記のコードで戻されるのは com.sun.star.sheet.XSheetConditionalEntries インターフェースです。

条件 Edit

条件付書式設定は条件にしたがって判断した結果セルにスタイルを適用します。そこで使用される条件はいくつかのプロパティーを持っています。条件のエントリーのプロパティーは com.sun.star.beans.PropertyValue を使用して設定します。 条件エントリーのプロパティーは次のものです。

Properties
Operator実行する演算。 .sheet.ConditionOperator で
Formula1評価する式の文字列
Formula2評価する式の文字列 (条件によっては使用されない)
SourcePositionセルの相対参照時の基本アドレス。 .table.CellAddress struct で
StyleName条件に一致したときに設定するセルスタイル

Operator は次の .sheet.ConditionOperator enum で設定します。

Values of com.sun.star.sheet.ConditionOperator
NONE条件なし
EQUAL次の値に等しい
NOT_EQUAL次の値に等しくない
GREATER次の値より大きい
GREATER_EQUAL次の値以上
LESS次の値より小さい
LESS_EQUAL次の値以下
BETWEEN次の値の間
NOT_BETWEEN次の値の間でない
FORMULA数式が

Formula1 と Formula2 は文字列としての式を使用します。

SourcePosition は com.sun.star.table.CellAddress を使用して設定します。 StyleName は適用するセルスタイル名を文字列として設定します。

新しい条件を設定するには addNew メソッドを使用します。このメソッドは条件のプロパティー値を引数に取ります。

次の例ではセルの値が 100 より「次の値より大きい」条件で "NewCellStyle" のセルスタイルを適用する条件付書式設定をセルに適用します。

Sub conditionalformat_2
Dim oCell As Object
Dim oConditionalFormat As Object
Dim aCondition(2) As New com.sun.star.beans.PropertyValue

  oCell = ThisComponent.Sheets( 0 ).getCellByPosition( 1, 1 ) 'B2
  oConditionalFormat = oCell.ConditionalFormat
  aCondition(0).Name = "Operator"
  aCondition(0).Value = com.sun.star.sheet.ConditionOperator.GREATER
  aCondition(1).Name = "Formula1"
  aCondition(1).Value = "100"
  aCondition(2).Name = "StyleName"
  aCondition(2).Value = "NewCellStyle"
  oConditionalFormat.addNew( aCondition() )  '--
  oCell.ConditionalFormat = oConditionalFormat
End Sub

条件の追加 Edit

条件付書式設定では条件は 3 つ使用することができます。前期の例では一つしか条件と使用しませんでした。ここでは二つ以上の条件を使用してみます。

Sub conditionalformat_3
Dim oCell As Object
Dim oConditionalFormat As Object
Dim aCondition1(2) As New com.sun.star.beans.PropertyValue
Dim aCondition2(3) As New com.sun.star.beans.PropertyValue

  oCell = ThisComponent.Sheets( 0 ).getCellByPosition( 1, 1 ) 'B2
  oConditionalFormat = oCell.ConditionalFormat
  aCondition1(0).Name = "Operator"
  aCondition1(0).Value = com.sun.star.sheet.ConditionOperator.GREATER
  aCondition1(1).Name = "Formula1"
  aCondition1(1).Value = "100"
  aCondition1(2).Name = "StyleName"
  aCondition1(2).Value = "NewCellStyle"

  aCondition2(0).Name = "Operator"
  aCondition2(0).Value = com.sun.star.sheet.ConditionOperator.BETWEEN
  aCondition2(1).Name = "Formula1"
  aCondition2(1).Value = "50"
  aCondition2(2).Name = "Formula2"
  aCondition2(2).Value = "100"
  aCondition2(3).Name = "StyleName"
  aCondition2(3).Value = "Result"

  oConditionalFormat.clear()  '-- 1
  oConditionalFormat.addNew( aCondition1() )
  oConditionalFormat.addNew( aCondition2() )
  oCell.ConditionalFormat = oConditionalFormat
End Sub

上記のコードでは二つの条件を設定しています。ここで, "1" 行目で clear() メソッドを使用しています。このメソッドは条件付書式設定の条件をすべて削除するためのメソッドです。前記「条件」でのコードの続きに "1" 行目なしで条件を設定しようとすると条件は前のものに続けて順に設定されます。そこで,一度前の条件をすべて削除しています。 上記のように,二つ以上の条件は順に addNew メソッドを使用して設定することで順に設定することができます。また,条件は clear メソッドですべて取り消すことができます。

条件の削除 Edit

一つだけの特定の位置の条件を削除するには removeByIndex メソッドを使用します。

Sub conditionalformat_4
Dim oCell As Object
Dim oConditionalFormat As Object

  oCell = ThisComponent.Sheets( 0 ).getCellByPosition( 1, 1 ) 'B2
  oConditionalFormat = oCell.ConditionalFormat
  oConditionalFormat.removeByIndex( 0 )  '--
  oCell.ConditionalFormat = oConditionalFormat
End Sub

条件のインデックスは "0" から始まるので一つ目の条件のインデックスは "0" です。また,複数個ある条件のインデックスが小さい条件を削除した際は,インデックスがあとの条件のインデックスが変更されて条件の順番が詰められます。

すべての条件を削除するには前出の clear() メソッドを使用します。

Sub conditionalformat_5
Dim oCell As Object
Dim oConditionalFormat As Object

  oCell = ThisComponent.Sheets( 0 ).getCellByPosition( 1, 1 ) 'B2
  oConditionalFormat = oCell.ConditionalFormat
  oConditionalFormat.clear()  '--
  oCell.ConditionalFormat = oConditionalFormat
End Sub

確認 Edit

条件付書式設定が設定されているかどうかを調べるためには hasElements() メソッドを使用します。

その他 Edit

設定されている条件数を取得するには Count プロパティーを使用します。また, getCount() メソッドでも同様に行なうことができます。

条件名を取得するには getElementNames メソッドを使用します。これで取得される条件名は "Entry0", "Entry1", "Entry2" です。この条件が設定されているかどうかは hasByName メソッドを使用して取得することができます。また,名前のエントリーを取得するには getByName メソッドを使用します。インデックスで取得するには getByIndex メソッドを使用します。

条件には enumeration を使用してアクセスすることができます。そのために createEnumeration を使用します。

まとめ Edit

使用したメソッドをまとめておきます。

Methods
void addNew (
SbxARRAY)
新しい条件を設定する
void removeByIndex (&brSbxLONG )指定した位置の条件を削除します
void clear ()すべての条件を削除します
boolean hasElements ()条件が設定されているかどうか
long getCount ()条件数
void getByIndex (&brSbxLONG )インデックスの条件を取得します。
void getByName (&brSbxSTRING )名前のエントリーを取得する
SbxARRAY getElementNames ()条件名を返す。"Entry0","Entry1","Entry2"
boolean hasByName (&brSbxSTRING )名前の条件があるかどうか。設定されているかどうか
.container.XEnumerationAccess createEnumeration ()条件の enumeration

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes