【问题标题】:What is wrong with this google sheets formula?这个谷歌表格公式有什么问题?
【发布时间】:2021-03-01 15:15:24
【问题描述】:

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

=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 个结果。

【问题讨论】:

  • 我投票结束这个问题,因为它不是编程问题。它可能适合webapps.stackexchange.com
  • @Quentin 有8013 questions 询问有关谷歌表格公式的问题。我认为它不应该因此而关闭。
  • 没有错。我可以创建两张表,输入一些数据,将您的公式剪切并粘贴到第三张表中并获得成功。如果我使用前两张纸上的数据并删除一些列或其他内容以使其不指向真实数据,那么我确实会遇到一些错误。但绝不会出现解析错误。
  • @pwilcox 感谢您的回复,但我想出了真正给我解析错误的原因,它是 ' , "select... ' ,在我将其更改为 ; 它比我的问题有效是否可以更改该查询以从每个选项卡中提供 3 个结果?因为如果我使用限制 3 ...与 sortn 上的相同。我真的想知道是否可以限制结果以仅从每个选项卡中获取 N 号标签

标签: google-sheets google-sheets-formula


【解决方案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 中。我刚刚对其进行了测试,但是如果我使用它似乎会出现一些问题,因为它显示了 3 个数据,但显示了两次。我得到前 3 个重复的 6 个结果,如果我尝试使用 2 张纸中的范围,我会收到错误“找不到范围(第 6 行)”
  • 脚本将获取除活动工作表(输入公式的位置)之外的所有绝对值。对于其他问题...如果您可以共享电子表格的副本(删除任何敏感数据),这将非常有帮助,以便我仔细查看。
  • 好吧,我的错误我看到它从所有选项卡中获取数据,但问题是我希望所有拉取的数据都按 Col4 排序,不知道为什么,但数据需要一段时间加载:P 顺便说一句:docs.google.com/spreadsheets/d/…
  • 哦,我刚刚发现另一个问题,如果我从工作表中删除数据或更改数据,除非我刷新页面,否则活动工作表上的数据不会更新,但如果我这样做了不知道为什么结果会向下移动 3 行(我将公式放在 A2 中,但它移动到 A5 之后,如果我再次更改其他工作表上的数据.. 并刷新它甚至不再更新
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多