作成日: 2019/11/12 最終更新日: 2021/05/26
文書種別
不具合
状況
修正済み
詳細
SUMIF関数の第3引数(sumrange)に相対座標を含んだセル範囲を指定した場合に
参照先のセルの値を変更してもSUMIF関数が自動的に再計算されません。
【再現手順】
1.新規作成したプロジェクトのForm1にFpSpreadを配置し、下記サンプルコードを記述します
2.セルB3またはセルB4の値を変更します
3.セルB1の集計結果を確認します
■サンプルコード(VB.NET)
参照先のセルの値を変更してもSUMIF関数が自動的に再計算されません。
【再現手順】
1.新規作成したプロジェクトのForm1にFpSpreadを配置し、下記サンプルコードを記述します
2.セルB3またはセルB4の値を変更します
3.セルB1の集計結果を確認します
■サンプルコード(VB.NET)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
FpSpread1.ActiveSheet.ReferenceStyle = FarPoint.Win.Spread.Model.ReferenceStyle.R1C1
FpSpread1.ActiveSheet.AutoCalculation = True
FpSpread1.ActiveSheet.Cells(0, 1).Formula = "SUMIF(R3C[-1]:R4C[-1],""数量"",R3C:R4C)"
FpSpread1.ActiveSheet.Cells(2, 0).Value = "数量"
FpSpread1.ActiveSheet.Cells(3, 0).Value = "数量"
FpSpread1.ActiveSheet.Cells(2, 1).Value = 222
FpSpread1.ActiveSheet.Cells(3, 1).Value = 2
End Sub
FpSpread1.ActiveSheet.ReferenceStyle = FarPoint.Win.Spread.Model.ReferenceStyle.R1C1
FpSpread1.ActiveSheet.AutoCalculation = True
FpSpread1.ActiveSheet.Cells(0, 1).Formula = "SUMIF(R3C[-1]:R4C[-1],""数量"",R3C:R4C)"
FpSpread1.ActiveSheet.Cells(2, 0).Value = "数量"
FpSpread1.ActiveSheet.Cells(3, 0).Value = "数量"
FpSpread1.ActiveSheet.Cells(2, 1).Value = 222
FpSpread1.ActiveSheet.Cells(3, 1).Value = 2
End Sub
回避方法
Service Pack 4(v11.0.4505.2012)で修正済み。
Service Pack 4 を適用せずに対処する方法としては、以下の三つの方法のいずれかで回避することが可能です。
回避方法1 SUMIF関数の第3引数(sumrange)のセル範囲を絶対座標で指定する方法
■サンプルコード(VB.NET)
回避方法2 SUMIFS関数を使用する方法
■サンプルコード(VB.NET)
回避方法3 RecalculateAllメソッドによる再計算を行う方法 ■サンプルコード(VB.NET)
※なおRecalculateAllメソッドはシートのすべての数式を再計算する機能となるため
パフォーマンス面での考慮が必要になります。
回避方法1 SUMIF関数の第3引数(sumrange)のセル範囲を絶対座標で指定する方法
■サンプルコード(VB.NET)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
FpSpread1.ActiveSheet.ReferenceStyle = FarPoint.Win.Spread.Model.ReferenceStyle.R1C1
FpSpread1.ActiveSheet.AutoCalculation = True
FpSpread1.ActiveSheet.Cells(0, 1).Formula = "SUMIF(R3C[-1]:R4C[-1],""数量"",R3C2:R4C2)"
FpSpread1.ActiveSheet.Cells(2, 0).Value = "数量"
FpSpread1.ActiveSheet.Cells(3, 0).Value = "数量"
FpSpread1.ActiveSheet.Cells(2, 1).Value = 222
FpSpread1.ActiveSheet.Cells(3, 1).Value = 2
End Sub
FpSpread1.ActiveSheet.ReferenceStyle = FarPoint.Win.Spread.Model.ReferenceStyle.R1C1
FpSpread1.ActiveSheet.AutoCalculation = True
FpSpread1.ActiveSheet.Cells(0, 1).Formula = "SUMIF(R3C[-1]:R4C[-1],""数量"",R3C2:R4C2)"
FpSpread1.ActiveSheet.Cells(2, 0).Value = "数量"
FpSpread1.ActiveSheet.Cells(3, 0).Value = "数量"
FpSpread1.ActiveSheet.Cells(2, 1).Value = 222
FpSpread1.ActiveSheet.Cells(3, 1).Value = 2
End Sub
回避方法2 SUMIFS関数を使用する方法
■サンプルコード(VB.NET)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
FpSpread1.ActiveSheet.ReferenceStyle = FarPoint.Win.Spread.Model.ReferenceStyle.R1C1
FpSpread1.ActiveSheet.AutoCalculation = True
FpSpread1.ActiveSheet.Cells(0, 1).Formula = "SUMIFS(R3C:R4C,R3C[-1]:R4C[-1],""数量"")"
FpSpread1.ActiveSheet.Cells(2, 0).Value = "数量"
FpSpread1.ActiveSheet.Cells(3, 0).Value = "数量"
FpSpread1.ActiveSheet.Cells(2, 1).Value = 222
FpSpread1.ActiveSheet.Cells(3, 1).Value = 2
End Sub
FpSpread1.ActiveSheet.ReferenceStyle = FarPoint.Win.Spread.Model.ReferenceStyle.R1C1
FpSpread1.ActiveSheet.AutoCalculation = True
FpSpread1.ActiveSheet.Cells(0, 1).Formula = "SUMIFS(R3C:R4C,R3C[-1]:R4C[-1],""数量"")"
FpSpread1.ActiveSheet.Cells(2, 0).Value = "数量"
FpSpread1.ActiveSheet.Cells(3, 0).Value = "数量"
FpSpread1.ActiveSheet.Cells(2, 1).Value = 222
FpSpread1.ActiveSheet.Cells(3, 1).Value = 2
End Sub
回避方法3 RecalculateAllメソッドによる再計算を行う方法 ■サンプルコード(VB.NET)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
FpSpread1.ActiveSheet.ReferenceStyle = FarPoint.Win.Spread.Model.ReferenceStyle.R1C1
FpSpread1.ActiveSheet.AutoCalculation = True
FpSpread1.ActiveSheet.Cells(0, 1).Formula = "SUMIF(R3C[-1]:R4C[-1],""数量"",R3C:R4C)"
FpSpread1.ActiveSheet.Cells(2, 0).Value = "数量"
FpSpread1.ActiveSheet.Cells(3, 0).Value = "数量"
FpSpread1.ActiveSheet.Cells(2, 1).Value = 222
FpSpread1.ActiveSheet.Cells(3, 1).Value = 2
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
FpSpread1.ActiveSheet.RecalculateAll()
End Sub
FpSpread1.ActiveSheet.ReferenceStyle = FarPoint.Win.Spread.Model.ReferenceStyle.R1C1
FpSpread1.ActiveSheet.AutoCalculation = True
FpSpread1.ActiveSheet.Cells(0, 1).Formula = "SUMIF(R3C[-1]:R4C[-1],""数量"",R3C:R4C)"
FpSpread1.ActiveSheet.Cells(2, 0).Value = "数量"
FpSpread1.ActiveSheet.Cells(3, 0).Value = "数量"
FpSpread1.ActiveSheet.Cells(2, 1).Value = 222
FpSpread1.ActiveSheet.Cells(3, 1).Value = 2
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
FpSpread1.ActiveSheet.RecalculateAll()
End Sub
※なおRecalculateAllメソッドはシートのすべての数式を再計算する機能となるため
パフォーマンス面での考慮が必要になります。
旧文書番号
84626