google-sheets - 谷歌工作表,选择命名范围内的列
问题描述
我试图在谷歌表格上的命名范围内选择一系列数据,但搜索后我仍然不知道该怎么做。
在这种情况下,我想计算一个俱乐部在一个比赛周内出现的时间。
在这里,我可以为我拥有的所有游戏周表做到这一点,没有问题。
=QUERY({B:C;D:E;F:G;H:I;J:K}; "SELECT Col1, SUM(Col2) WHERE Col1 <> '' AND Col1 <> 'GK' AND Col1 <> 'DEF' AND Col1 <> 'MID' AND Col1 <> 'FW' AND Col1 <> 'EXTRA' AND Col1 <> 'Club' AND Col1 <> 'count' AND Col1 MATCHES '^.{0,5}$' GROUP BY Col1 ORDER BY SUM(Col2) DESC LABEL Col1 'Club', SUM(Col2) 'count'")
但我想对每个游戏周表做同样的事情。到目前为止我有这个
=QUERY({(B6:B15):(C6:C15);(D6:D15):(E6:E15);(F6:F15):(G6:G15);(H6:H15):(I6:I15);(J6:J15):(K6:K15)}; "SELECT Col1, SUM(Col2) WHERE Col1 <> '' GROUP BY Col1 ORDER BY SUM(Col2) DESC LABEL Col1 'Club', SUM(Col2) 'count'")
但它不是很有用,因为我必须为每个下一个表更改每个范围。
因此,我尝试将“Gameweek 1”表设置为命名范围gw1_clubcount
,并且只选择与总数类似的足够列,这样我只需要为每个游戏周更改它,但显然它不起作用,但这就是我想要的抵达。
=QUERY(gw1_clubcount {B:C;D:E;F:G;H:I;J:K}; "SELECT Col1, SUM(Col2) WHERE Col1 <> '' GROUP BY Col1 ORDER BY SUM(Col2) DESC LABEL Col1 'Club', SUM(Col2) 'count'")
我找到了 INDEX 函数,您可以在其中选择命名范围的所需行和列。这将在下面给出类似的内容,但这不是您使用它的方式。
=QUERY({INDEX(gw1_clubcount,,1):INDEX(gw1_clubcount,,2);INDEX(gw1_clubcount,,3):INDEX(gw1_clubcount,,4);INDEX(gw1_clubcount,,5):INDEX(gw1_clubcount,,6);INDEX(gw1_clubcount,,7):INDEX(gw1_clubcount,,8);INDEX(gw1_clubcount,,9):INDEX(gw1_clubcount,,10)} ; "SELECT Col1, SUM(Col2) WHERE Col1 <> '' GROUP BY Col1 ORDER BY SUM(Col2) DESC LABEL Col1 'Club', SUM(Col2) 'count'")
我对床单不是很有经验,非常感谢您的帮助!
解决方案
在这里,我创建了一个需要自定义功能的解决方案:
编写自定义函数:
- 在 Google 表格中创建或打开电子表格。
- 选择菜单项工具 > 脚本编辑器。
- 删除脚本编辑器中的任何代码。
- 对于这个问题,只需将下面的代码(堆栈函数)复制并粘贴到您的脚本编辑器中。
- 在顶部,单击保存保存。
使用自定义函数:
- 单击要使用该功能的单元格。
- 键入等号 (=),后跟函数名称和任何输入值(例如 =DOUBLE(A1)),然后按 Enter。
- 单元格将暂时显示 Loading...,然后返回结果。
代码:
function stack(arr) {
var flatArr = arr.flat();
var filtered = flatArr.filter(function (el) {return el != "";});
const newArr = [];
while(filtered.length) newArr.push(filtered.splice(0,2));
return(newArr);
}
命名范围:
示例用法:
游戏周1:
=QUERY(stack(FLATTEN(gw1_clubcount)), "SELECT Col1, SUM(Col2) WHERE Col1 <> '' GROUP BY Col1 ORDER BY SUM(Col2) DESC LABEL Col1 'Club', SUM(Col2) 'count'")
游戏周2:
=QUERY(stack(FLATTEN(gw2_clubcount)), "SELECT Col1, SUM(Col2) WHERE Col1 <> '' GROUP BY Col1 ORDER BY SUM(Col2) DESC LABEL Col1 'Club', SUM(Col2) 'count'")
参考:
推荐阅读
- javascript - 如何通过拆分字符串将数组转换为对象?
- c++ - 如何使用模板函数进行隐式转换
- ruby-on-rails - 如何在 do 循环中发布请求 API
- python - 为什么比较两个数据帧时会得到不同的结果?
- r - dplyr 中的管道 (|) 如何在 Shiny 和数据表的上下文中工作?
- javascript - 当我尝试将多个点击侦听器添加到标记 django 时,initMap 不是一个函数
- javafx - 条形图无法正确显示
- r - 如何根据 R 中的另一个数据框更改数据框中的值?
- android - 对话框全屏布局问题
- php - Laravel:更新身份验证用户数据然后显示视图