SUMIF関数の計算範囲に同数式を設定したセルが含まれると数式が正しく動作しない
対象製品
SpreadJS 9J
発生環境
9.20161.0
状況
修正済み
詳細
SUMIF関数の計算範囲に同数式を設定したセルが含まれると、SUMIF関数が正しく動作しない現象が発生します。
【再現方法】
1.下記の再現コードを実行します
【動作結果】
セルC1に設定されたSUMIF関数が動作しない現象が発生します
【再現コード】
window.onload = function(){
var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));
var sheet = spread.getActiveSheet();
// A列の設定
sheet.setValue(0, 0, "AAAA");
sheet.setValue(1, 0, "BBBB");
sheet.setValue(2, 0, "CCCC");
// B列の設定
sheet.setValue(3, 1, "AAAA");
sheet.setValue(4, 1, "BBBB");
sheet.setValue(5, 1, "CCCC");
sheet.setValue(6, 1, "AAAA");
sheet.setValue(7, 1, "BBBB");
sheet.setValue(8, 1, "CCCC");
// C列の設定
sheet.setFormula(0, 2, '=SUMIF(B:B,A1,C:C)');
sheet.setFormula(1, 2, '=SUMIF(B:B,A2,C:C)');
sheet.setValue(3, 2, "100");
sheet.setValue(4, 2, "3000");
sheet.setValue(5, 2, "10");
sheet.setValue(6, 2, "200");
sheet.setValue(7, 2, "5000");
sheet.setValue(8, 2, "9");
};
【再現方法】
1.下記の再現コードを実行します
【動作結果】
セルC1に設定されたSUMIF関数が動作しない現象が発生します
【再現コード】
window.onload = function(){
var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));
var sheet = spread.getActiveSheet();
// A列の設定
sheet.setValue(0, 0, "AAAA");
sheet.setValue(1, 0, "BBBB");
sheet.setValue(2, 0, "CCCC");
// B列の設定
sheet.setValue(3, 1, "AAAA");
sheet.setValue(4, 1, "BBBB");
sheet.setValue(5, 1, "CCCC");
sheet.setValue(6, 1, "AAAA");
sheet.setValue(7, 1, "BBBB");
sheet.setValue(8, 1, "CCCC");
// C列の設定
sheet.setFormula(0, 2, '=SUMIF(B:B,A1,C:C)');
sheet.setFormula(1, 2, '=SUMIF(B:B,A2,C:C)');
sheet.setValue(3, 2, "100");
sheet.setValue(4, 2, "3000");
sheet.setValue(5, 2, "10");
sheet.setValue(6, 2, "200");
sheet.setValue(7, 2, "5000");
sheet.setValue(8, 2, "9");
};
回避方法
SpreadJS 9J SP2(Ver.9.20171.0)で修正済み
SpreadJS 9J SP2(Ver.9.20171.0)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
同数式を設定したセルを含まないように計算範囲を指定することで、現象の回避が可能です。
【再現コードへの回避方法適用例】
window.onload = function(){
var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));
var sheet = spread.getActiveSheet();
// A列の設定
sheet.setValue(0, 0, "AAAA");
sheet.setValue(1, 0, "BBBB");
sheet.setValue(2, 0, "CCCC");
// B列の設定
sheet.setValue(3, 1, "AAAA");
sheet.setValue(4, 1, "BBBB");
sheet.setValue(5, 1, "CCCC");
sheet.setValue(6, 1, "AAAA");
sheet.setValue(7, 1, "BBBB");
sheet.setValue(8, 1, "CCCC");
// C列の設定
//sheet.setFormula(0, 2, '=SUMIF(B:B,A1,C:C)');
//sheet.setFormula(1, 2, '=SUMIF(B:B,A2,C:C)');
sheet.setFormula(0, 2, '=SUMIF(B2:B9,A1,C2:C9)');
sheet.setFormula(1, 2, '=SUMIF(B3:B9,A2,C3:C9)');
sheet.setValue(3, 2, "100");
sheet.setValue(4, 2, "3000");
sheet.setValue(5, 2, "10");
sheet.setValue(6, 2, "200");
sheet.setValue(7, 2, "5000");
sheet.setValue(8, 2, "9");
};
SpreadJS 9J SP2(Ver.9.20171.0)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
同数式を設定したセルを含まないように計算範囲を指定することで、現象の回避が可能です。
【再現コードへの回避方法適用例】
window.onload = function(){
var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));
var sheet = spread.getActiveSheet();
// A列の設定
sheet.setValue(0, 0, "AAAA");
sheet.setValue(1, 0, "BBBB");
sheet.setValue(2, 0, "CCCC");
// B列の設定
sheet.setValue(3, 1, "AAAA");
sheet.setValue(4, 1, "BBBB");
sheet.setValue(5, 1, "CCCC");
sheet.setValue(6, 1, "AAAA");
sheet.setValue(7, 1, "BBBB");
sheet.setValue(8, 1, "CCCC");
// C列の設定
//sheet.setFormula(0, 2, '=SUMIF(B:B,A1,C:C)');
//sheet.setFormula(1, 2, '=SUMIF(B:B,A2,C:C)');
sheet.setFormula(0, 2, '=SUMIF(B2:B9,A1,C2:C9)');
sheet.setFormula(1, 2, '=SUMIF(B3:B9,A2,C3:C9)');
sheet.setValue(3, 2, "100");
sheet.setValue(4, 2, "3000");
sheet.setValue(5, 2, "10");
sheet.setValue(6, 2, "200");
sheet.setValue(7, 2, "5000");
sheet.setValue(8, 2, "9");
};