如何根据条件从另一个列中找到某些列值的总和?

How to find the sum of certain column values ​by conditions from another one?

有 2 列。第一个具有日期格式 DD.MM.YYYY 的值,第二个具有整数值。如何根据匹配第一列月份的条件产生第二列数字的总和? For ex Im interesting in the sum of the values that match MONTH() = 11?

每月总和

function myfunk() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName('Sheet0');
  const vs = sh.getRange(2,1,sh.getLastRow() - 1, 2).getValues();
  let sums = {pA:[]};
  vs.forEach((r => {
    let p = r[0].split('.').filter((e,i) => i > 0).reduce((a,c,idx) => {
      if(idx > 0) a += '.';
      a += c;
      return a;
    });
    if(!sums.hasOwnProperty(p)) {
      sums[p]= r[1];
      sums.pA.push(p);
    } else {
      sums[p] += r[1]
    }
  }));
  let html = '<style> td,th{border: 1px solid black;}</style><table><tr><th>Month</th><th>Sum</th></tr>';
  sums.pA.forEach(p => {
    html += `<tr><td>${p}</td><td>${sums[p]}</td></tr>`
  });
  SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutput(html),'Monthly Sums')
}

数据:

求和对话框:

已向 osh 添加每月金额

function myfunk() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName('Sheet0');
  const osh = ss.getSheetByName('Sheet1');
  osh.clear();
  const vs = sh.getRange(2,1,sh.getLastRow() - 1, 2).getValues();
  let sums = {pA:[]};
  vs.forEach((r => {
    let p = r[0].split('.').filter((e,i) => i > 0).reduce((a,c,idx) => {
      if(idx > 0) a += '.';
      a += c;
      return a;
    });
    if(!sums.hasOwnProperty(p)) {
      sums[p]= r[1];
      sums.pA.push(p);
    } else {
      sums[p] += r[1]
    }
  }));
  let html = '<style> td,th{border: 1px solid black;}</style><table><tr><th>Month</th><th>Sum</th></tr>';
  let arr = [['Month','Sums']];
  sums.pA.forEach(p => {
    html += `<tr><td>${p}</td><td>${sums[p]}</td></tr>`
    arr.push([`${p}`,`${sums[p]}`])
  });
  SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutput(html),'Monthly Sums');
  osh.getRange(1,1,arr.length,arr[0].length).setValues(arr);
}

假设你的原始数据在一个叫Sheet1的sheet中,你在A1和B1中有headers,而你发布的数据集在A2:B14 单元格中没有任何内容 A15:B。在新的 sheet 中,在单元格 A1 中输入此公式:

=ArrayFormula(QUERY({DATE(YEAR(Sheet1!A2:A),MONTH(Sheet1!A2:A),1),B2:B},"Select Col1, SUM(Col2) WHERE Col2 Is Not Null GROUP BY Col1 LABEL Col1 'MONTH', SUM(Col2) 'TOTAL' FORMAT Col1 'mmm yyyy'"))

QUERY 将产生两个 headers(您可以根据需要在 QUERYLABEL 部分中进行更改)以及所有 months/years 存在于数据集中。

QUERY 作用于一个虚拟数组,该数组首先根据原始日期的月份和年份将 Sheet1!A2:A 中的所有日期转换为新的 DATEs,但都落在这个月的第一天。这允许 SUM 分组在 QUERY 中。然后 QUERYFORMAT 部分将这些标准化日期转换为只显示月份和年份部分。

调整 sheet 名称和引用范围以适应实际数据的 sheet 名称和数据范围。

注意(在了解到 OP 的语言环境是俄罗斯之后):

此版本适用于您的语言环境...

=ArrayFormula(QUERY({DATE(YEAR(Sheet1!A2:A); MONTH(Sheet1!A2:A);1) \ Sheet1!B2:B}; "Select Col1, SUM(Col2) WHERE Col2 Is Not Null GROUP BY Col1 LABEL Col1 'MONTH', SUM(Col2) 'TOTAL' FORMAT Col1 'mmm yyyy'"))