小数组(Google电子表格)

时间:2014-03-28 10:23:51

标签: google-sheets

我有5列数字,我想将每行排序到另一组列中。我想我需要使用small()(例如小(a2:e2,1)用于f2;小(a2:e2,2)用于g2,依此类推)。有没有为下一行迭代这个;如果可能,只使用原生谷歌电子表格公式?

提前致谢

2 个答案:

答案 0 :(得分:0)

我能够做一个临时工作,但我不得不使用3个作弊列。它现在看起来不错,但我想这对于真正庞大的数字来说会很麻烦。

以下是参考样本表:https://docs.google.com/spreadsheets/d/1MQTP2XkRsPRAnPQ5wLhkR8JoNVY6YOExVlOkkX8UeRs/edit#gid=0

原始数据在A3:E

第一个作弊列(G3:G)只创建一个数字列,从1到源数据中找到的最大数字。 1-9更改为01-09以便于搜索。然后在最后添加“#” - 这将在以后方便使用:

  • 作弊栏1 =过滤器(如果(行(A:A)=最大(A:E)+ 1,“#”,文本(行(A:A),“00”)),行(A:A) < = MAX(A:E)1)

第二个作弊栏(H3:H)将每一行组合成一个由“ - ”分隔的字符串和一个“#”标记:

  • 作弊栏2 =过滤器(文字(A3:A,“00”)&“ - ”& text(B3:B,“00”)&“ - ”& text(C3:C,“00”)&“-”& ;文本(D3:d,"00")及""&安培;文本(E3:E,"00")及“#”,A3:A<> "")

最后一个作弊栏(I3:I)通过查找从01到最大数字的作弊栏中的每个数字来排序每一行(来自作弊列2),然后是“#”字符(这确保每行仍然是有#end标记)。 “查找”将返回每个数字的“位置”或错误(如果找不到)。通过使用“if”,我们可以使“find”返回实际数字或“”。

= filter(arrayformula(if(iferror(find(transpose(G3:G,G3:G<"“)),H3:H),”“),转置(过滤器(G3:G,G3: G<> "")),"")),A3:A<> "")

上面的公式创建了与作弊列1中的数字一样多的列。为了防止这种情况,每个数字都加上“ - ”,然后使用“连接”将所有内容组合成一个大型字符串,每个字符串由“#”。然后使用“#”标记分割字符串。

  • 作弊栏3 =转置(分割(连接)(过滤器(arrayformula(if(iferror(find(transpose(过滤器(G3:G,G3:G<“)”),H3:H),“”),“ -"&安培;转置(过滤器(G3:G,G3:G<> "")),"")),A3:A<> "")),“#”))

然后使用mid()将每个数字分成每个相应的列。

  • 小1 =过滤器(mid(I3:I,2,2)* 1,A3:A<>“)
  • 小2 =过滤器(mid(I3:I,5,2)* 1,A3:A<>“)
  • 小3 =过滤器(mid(I3:I,8,2)* 1,A3:A<>“)
  • 小4 =过滤器(mid(I3:I,11,2)* 1,A3:A<>“)
  • 小5 =过滤器(mid(I3:I,14,2)* 1,A3:A<>“))

请注意,上面的公式仅适用于数字1-99。对于较大的数字,Text()公式应该具有更多的零,以对应于最大数字的位数。 Mid()公式也应相应调整。

我想强调的是,我远非电子表格专家,而且这种解决方案非常“未经优化”。它需要几个作弊栏;第一个甚至比原始数据有更多的行。如果有人能帮助我摆脱作弊栏(或至少是第一个),我将非常感激。

答案 1 :(得分:0)

如您在问题中提到的那样使用SMALL怎么样?

=small($A3:$E3,column()-columns($A3:$G3))

您需要相应地更改范围。最后一个$G$3是放置公式的单元格之前的单元格。

Sample