作成日: 2019/01/22 最終更新日: 2019/04/17
文書種別
不具合
状況
修正済み
詳細
■事象
条件付き書式を設定している場合に、その書式が参照しているセルに設定された数式が再計算されない場合があります。
なお、本事象は以下の条件をすべて満たす場合に発生します。
1)数式の中にIFまたはIFS関数が使用されている。
2)上記1のセルを条件付き書式に使用している。
3)EnableDiagonalLineプロパティをTrueに設定している。
※EnableDiagonalLineプロパティは、セル内の文字列を回転させている場合に、左右のセル罫線も文字列にあわせて回転させるかどうかを決定するプロパティで、デフォルト値は"False"です。(セルの斜め罫線とは関係ありません。)
■サンプルコード
実装内容:
・「A3」と「A4」のいずれかのセルに値が入っている時、「A5」セルにそれらのセルの平均値を表示する。
・「A5」セルの値が「A2」セルの値より小さい場合、「A1」セルの背景色を変更する(条件付き書式)
■再現手順
1)上記処理を実装したプロジェクトを実行する。
2)「A3」または「A4」セルの値を変更する。
→「A5」セルの値が更新される(数式が再計算される)…正常な動作
3)再度「A3」または「A4」セルの値を変更する。
→「A5」セルの値が更新されない。
条件付き書式を設定している場合に、その書式が参照しているセルに設定された数式が再計算されない場合があります。
なお、本事象は以下の条件をすべて満たす場合に発生します。
1)数式の中にIFまたはIFS関数が使用されている。
2)上記1のセルを条件付き書式に使用している。
3)EnableDiagonalLineプロパティをTrueに設定している。
※EnableDiagonalLineプロパティは、セル内の文字列を回転させている場合に、左右のセル罫線も文字列にあわせて回転させるかどうかを決定するプロパティで、デフォルト値は"False"です。(セルの斜め罫線とは関係ありません。)
■サンプルコード
実装内容:
・「A3」と「A4」のいずれかのセルに値が入っている時、「A5」セルにそれらのセルの平均値を表示する。
・「A5」セルの値が「A2」セルの値より小さい場合、「A1」セルの背景色を変更する(条件付き書式)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
FpSpread1.ActiveSheet.RowCount = 5
FpSpread1.ActiveSheet.ColumnCount = 2
' セルの斜め罫線を有効にします。
FpSpread1.ActiveSheet.EnableDiagonalLine = True
' 数式を設定します。(A5セルにA3とA4の平均を表示)
FpSpread1.ActiveSheet.Cells(4, 0).Formula _
= "IF(OR(A$3<>"""",A$4<>""""),AVERAGE(A$3,A$4),"""")"
' 条件付き書式を設定します。(A5セルの値がA2セルより小さい時、セルの背景色を変える)
Dim formulaRule1 As New FarPoint.Win.Spread.FormulaConditionalFormattingRule("A$2 > A$5")
formulaRule1.BackColor = Color.Orange
FpSpread1.ActiveSheet.SetConditionalFormatting(0, 0, 1, 1, formulaRule1)
' セルに値を設定します
FpSpread1.ActiveSheet.SetValue(0, 0, "CF")
FpSpread1.ActiveSheet.SetValue(1, 0, 10.0R)
FpSpread1.ActiveSheet.SetValue(2, 0, 10.0R)
FpSpread1.ActiveSheet.SetValue(3, 0, 5.0R)
End Sub
FpSpread1.ActiveSheet.RowCount = 5
FpSpread1.ActiveSheet.ColumnCount = 2
' セルの斜め罫線を有効にします。
FpSpread1.ActiveSheet.EnableDiagonalLine = True
' 数式を設定します。(A5セルにA3とA4の平均を表示)
FpSpread1.ActiveSheet.Cells(4, 0).Formula _
= "IF(OR(A$3<>"""",A$4<>""""),AVERAGE(A$3,A$4),"""")"
' 条件付き書式を設定します。(A5セルの値がA2セルより小さい時、セルの背景色を変える)
Dim formulaRule1 As New FarPoint.Win.Spread.FormulaConditionalFormattingRule("A$2 > A$5")
formulaRule1.BackColor = Color.Orange
FpSpread1.ActiveSheet.SetConditionalFormatting(0, 0, 1, 1, formulaRule1)
' セルに値を設定します
FpSpread1.ActiveSheet.SetValue(0, 0, "CF")
FpSpread1.ActiveSheet.SetValue(1, 0, 10.0R)
FpSpread1.ActiveSheet.SetValue(2, 0, 10.0R)
FpSpread1.ActiveSheet.SetValue(3, 0, 5.0R)
End Sub
■再現手順
1)上記処理を実装したプロジェクトを実行する。
2)「A3」または「A4」セルの値を変更する。
→「A5」セルの値が更新される(数式が再計算される)…正常な動作
3)再度「A3」または「A4」セルの値を変更する。
→「A5」セルの値が更新されない。
回避方法
Service Pack 3(v11.0.4504.2012)で修正済み。
Service Packを適用せずに対処する方法としては、以下の方法が有効です。
1.数式による集計対象セルの値が更新されたときにRecalculateAllメソッドを実行する
FpSpread1.ActiveSheet.RecalculateAll()
2.SheetViewクラスのEnableDiagonalLineプロパティをFalseに設定する
※Excelファイルをインポートした時、このプロパティは自動的にTrueに設定されます。
Service Packを適用せずに対処する方法としては、以下の方法が有効です。
1.数式による集計対象セルの値が更新されたときにRecalculateAllメソッドを実行する
FpSpread1.ActiveSheet.RecalculateAll()
2.SheetViewクラスのEnableDiagonalLineプロパティをFalseに設定する
※Excelファイルをインポートした時、このプロパティは自動的にTrueに設定されます。
旧文書番号
83547