开发者问题收集

如何将拆分公式从 Excel 转换为 Sheets(假设缺少 Textsplit)

2023-09-06
186

我试图将以下 Excel 工作表的功能复制到 Google 表格中,但遇到了问题。

https://1drv.ms/x/s!ApTGA-odt1HWhzGjuVHPn9bJyr5G?e=ZxtUCi

它将 A2 中的列表切分为 c3 中请求的组数,并将它们随机显示在组列中。(是的,我想在对工作表进行更改时重新计算)

问题是以下公式使用了许多 Google 表格没有的功能有。

=LET(group_count,C2,input_names_as_rows,TRIM(TEXTSPLIT(A2,,",")),how_many_names,ROWS(input_names_as_rows),random_names_as_rows,SORTBY(input_names_as_rows,RANDARRAY(how_many_names)),rows_per_group_count,CEILING.MATH(how_many_names/group_count,1),BYCOL(MAKEARRAY(rows_per_group_count,group_count,LAMBDA(each_row,each_column,IFERROR(INDEX(random_names_as_rows,(each_row-1)*group_count+each_column,1),""))),LAMBDA(each_col,TEXTJOIN(", ",FALSE,each_col)))) 尝试使用公式时出现错误

错误未知函数:'TEXTSPLIT' 我尝试使用拆分 (SPLIT(A2,","),没有返回任何值,但也没有错误。

我无法使用 Excel 来完成我需要做的事情,并且需要将最终结果保持在两行之内,除此之外,如果有其他方法,我宁愿不使用应用程序脚本,并且我需要它在工作表中的值发生变化时重新计算。

我包含了这两个电子表格,并希望任何人能够提供帮助来解决这个问题。

https://docs.google.com/spreadsheets/d/16IRhfR7OkaoeTc5k7LJGysmndE1zQtfz22VSlMDUaFs/edit?usp=sharing

2个回答

问题不在于 SPLIT 本身

Google Sheets 中的 SPLIT 将字符串分为列而不是行,因此您应该将其更改为 TRANSPOSE(SPLIT(A2,","))

此外,Sheets 中没有 SORTBY,但有 SORT。并且 SORT 需要每列的第二个参数来表示它是升序还是降序。因此,在 RANDARRAY 之后,您应该添加 1(或 0,由于它是随机的,因此无法区分它是升序还是降序)。

=LET(
  group_count, C2,
  input_names_as_rows, TRANSPOSE(SPLIT(A2, ",")),
  how_many_names, ROWS(input_names_as_rows),
  random_names_as_rows, SORT(input_names_as_rows, RANDARRAY(how_many_names),1),
  rows_per_group_count, CEILING.MATH(how_many_names / group_count, 1),
  BYCOL(
    MAKEARRAY(rows_per_group_count, group_count, LAMBDA(each_row, each_column, IFERROR(INDEX(random_names_as_rows, (each_row - 1) * group_count + each_column, 1), ""))),
    LAMBDA(each_col, TEXTJOIN(", ", FALSE, each_col))
  )
)

在此处输入图片说明

Martín
2023-09-06

这里有一种方法你可以测试一下:

=let(Σ,tocol(split(A2,", ",0)), Λ,wrapcols(sort(Σ,randarray(rows(Σ)),),max(1,rounddown(rows(Σ)/C2)),),
 bycol(ifna(vstack(choosecols(Λ,sequence(min(rows(Σ),C2))),iferror(torow(choosecols(Λ,sequence(columns(Λ)-C2,1,C2+1)),1)))),lambda(Λ,textjoin(", ",1,Λ))))

在此处输入图片描述

rockinfreakshow
2023-09-06