作成日: 2019/12/02 最終更新日: 2019/12/20
文書種別
不具合
状況
修正済み
詳細
シートをDataTableなどと連結している場合、SUBTOTAL関数の引数として指定されている集計対象の範囲内にある別のセルのSUBTOTAL関数の結果を含めてしまいます。SUBTOTAL関数は、集計対象の範囲内にある別のセルのSUBTOTAL関数の結果は本来含めません。
【再現手順】
1. 新規作成したプロジェクトのForm1にFpSpreadを貼り付け、下記サンプルコードを記述します。
2. プロジェクトを実行します。
-- セルA5に「100」と表示されますが、セルA4はSUBTOTAL関数によるものなので、計算結果に含まれず「70」と表示されるのが本来の動作となります。
■サンプルコード(VB.NET)
【再現手順】
1. 新規作成したプロジェクトのForm1にFpSpreadを貼り付け、下記サンプルコードを記述します。
2. プロジェクトを実行します。
-- セルA5に「100」と表示されますが、セルA4はSUBTOTAL関数によるものなので、計算結果に含まれず「70」と表示されるのが本来の動作となります。
■サンプルコード(VB.NET)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim DT As New DataTable
Dim DS As New DataSet
FpSpread1.ActiveSheet.RowCount = 6
FpSpread1.Sheets.Count = 2
DT = DS.Tables.Add("SampleTable")
DT.Columns.AddRange(New DataColumn() {
New DataColumn("ID", Type.GetType("System.Int32"))
})
DT.Rows.Add(New Object() {10})
DT.Rows.Add(New Object() {20})
DT.Rows.Add(New Object() {40})
Dim dv As DataView
dv = New DataView(DT)
dv.Sort = "ID"
'データセットを接続します
FpSpread1.DataSource = dv
FpSpread1.ActiveSheet.RowCount = 6
FpSpread1.ActiveSheet.Cells(3, 0).Formula = "SUBTOTAL(109,A1:A2)"
FpSpread1.ActiveSheet.Cells(4, 0).Formula = "SUBTOTAL(109,A1:A4)"
FpSpread1.Sheets(1).Cells(0, 0).Value = 10
FpSpread1.Sheets(1).Cells(1, 0).Value = 20
FpSpread1.Sheets(1).Cells(2, 0).Formula = "SUBTOTAL(109,A1:A2)"
FpSpread1.Sheets(1).Cells(3, 0).Value = 40
FpSpread1.Sheets(1).Cells(4, 0).Formula = "SUBTOTAL(109,A1:A4)"
End Sub
Dim DT As New DataTable
Dim DS As New DataSet
FpSpread1.ActiveSheet.RowCount = 6
FpSpread1.Sheets.Count = 2
DT = DS.Tables.Add("SampleTable")
DT.Columns.AddRange(New DataColumn() {
New DataColumn("ID", Type.GetType("System.Int32"))
})
DT.Rows.Add(New Object() {10})
DT.Rows.Add(New Object() {20})
DT.Rows.Add(New Object() {40})
Dim dv As DataView
dv = New DataView(DT)
dv.Sort = "ID"
'データセットを接続します
FpSpread1.DataSource = dv
FpSpread1.ActiveSheet.RowCount = 6
FpSpread1.ActiveSheet.Cells(3, 0).Formula = "SUBTOTAL(109,A1:A2)"
FpSpread1.ActiveSheet.Cells(4, 0).Formula = "SUBTOTAL(109,A1:A4)"
FpSpread1.Sheets(1).Cells(0, 0).Value = 10
FpSpread1.Sheets(1).Cells(1, 0).Value = 20
FpSpread1.Sheets(1).Cells(2, 0).Formula = "SUBTOTAL(109,A1:A2)"
FpSpread1.Sheets(1).Cells(3, 0).Value = 40
FpSpread1.Sheets(1).Cells(4, 0).Formula = "SUBTOTAL(109,A1:A4)"
End Sub
回避方法
Service Pack 3(v12.0.4504.2012)で修正済み。
旧文書番号
84691