这个谷歌表格公式有什么问题?

时间:2021-03-01 15:15:24

标签: google-sheets google-sheets-formula

我想在谷歌表格中使用这个公式:

=QUERY({sheet1!A2:D;sheet2!A2:D},"select * where Col4>=65 order by Col4 desc")

但我得到“公式解析错误”基本上我想从多个工作表选项卡中获取数据并将其显示在一张工作表中,但我希望对数据进行排序并且只获得 Col4 >= 到 65 甚至更好的结果将只显示每个选项卡的前 3 个结果

我尝试过使用

=sortn({sheet1!A2:D;sheet2!A2:D};5;0;4;0)

但是这显示了两个标签的前 5 个结果,但我希望我能从每个标签中获得前 3 个结果。

2 个答案:

答案 0 :(得分:1)

您可能想尝试自定义函数?

function filterDataBiggerThen(rangeA1, column, value, limit) {
  const ss = SpreadsheetApp.getActive();
  const activeSheet = ss.getActiveSheet();
  let output = [];
  ss.getSheets().filter(sh => sh.getName() !== activeSheet.getName())
    .map(sh => sh.getRange(rangeA1).getValues().sort((a, b) => b[column - 1] - a[column - 1])
      .forEach((row, i) => {
        if (row[column - 1] >= value && i < limit) output.push(row)
      })
    )
  return output && output.length ? output : "No data found";
}

在您的电子表格中,您可以将此函数用作公式

=filterDataBiggerThen("A2:D"; 4; 65; 3)

答案 1 :(得分:0)

你好,经过多次反复试验,我设法得到了一个完全符合我要求的公式,只有一个简单的问题,它太长了......但也许它也可以帮助其他人,或者有人可以想出一个简化它的方法。

=SORT(IFERROR({iferror(query({sheet1!A2:D}; "select * where Col4>=65 order by Col4 desc Limit 3";0);A2:D2/0); iferror(query({sheet2!A2:D}; "select * where Col4>=65 order by Col4 desc Limit 3";0);A2:D2/0)});4;0)

这个公式将像我想要的那样显示每个选项卡的 3 个结果,并将对显示的所有数据进行整体排序,但就像我说的它已经很长了,如果我想添加更多选项卡,它会变得更长。但这是我能想出的唯一解决方案,它可以自动完成我需要的一切。我希望它可以帮助人们,如果有人可以简化它,那将是一个更大的帮助。