SUMIF関数の計算範囲に同数式を設定したセルが含まれると数式が正しく動作しない

文書番号 : 40123     文書種別 : 不具合     登録日 : 2017/03/09     最終更新日 : 2017/03/29
文書を印刷する
対象製品
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");
};
回避方法
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");
};