我正在寻找一种有效的方法来连接变量分隔符,如下面的输出所示,其中有可变数量的“~”用作分隔符,可能用作 lamda() 和 query()
例如,下表将 A3:F3 与变量 tildas 组合起来 ~ 使用
="~"&A3&"~~~"&B3&"~"&C3&"~~~"&D3&"~"&E3&"~~"&F3&"~"
Join() 实际上不会很好地工作,因为它也不会添加封装 ~,textjoin() 可以在 lamda() 中与 arrayformula() 结合使用。
但是,我可能想将此 函数与 query() 或其他公式结合使用,发现很难将字符串插入到查询中,并且需要一种解决方法来完成列的串联
=transpose(query(transpose(_you query_);;COLUMNS(_you query_)))
像
=QUERY(A1:B4, "Select A & 'two' ")
这样简单的事情会失败。
身份证 | 第一 | 最后 | 生日 | 兄弟姐妹 | 年龄 | 输出 |
---|---|---|---|---|---|---|
AB | 杰克 | 梅西 | 19年1月1日 | 玛丽亚,玛丽 | 5 | ~AB~~~杰克~梅西~~~01/01/19~玛丽亚,玛丽~~5~ |
CD | 杰克 | 史密斯 | 19年1月2日 | 5 | ~CD~~~杰克~史密斯~~~01/02/19~~~5~ | |
EF | 山姆 | 梅西 | 19年2月1日 | 塔拉、詹姆斯、比利 | 5 | ~EF~~~萨姆~梅西~~~02/01/19~塔拉、詹姆斯、比利~~5~ |
GH | 止摩他 | 雷诺多 | 19年3月2日 | 安德里亚 | 5 | ~GH~~~萨玛莎~雷诺多~~~03/02/19~安德里亚~~5~ |
IJ | 约翰 | 乔丹 | 19年4月1日 | 5 | ~IJ~~~约翰~乔丹~~~04/01/19~~~5~ | |
吉隆坡 | 杰米 | 布莱恩特 | 18年5月2日 | 杰克、迈克尔、伊丽莎白 | 5 | ~KL~~~杰米~布莱恩特~~~05/02/18~杰克、迈克尔、伊丽莎白~~5~ |
明尼苏达 | 珍妮 | 奥尼尔 | 17年1月1日 | 7 | ~MN~~~珍妮~奥尼尔~~~01/01/17~~~7~ |
无法通过
QUERY
做到这一点。
您可以从
数据>命名函数定义自定义函数
F(arr,ins)
:
F(arr,ins) ← ARRAYFORMULA(BYROW(REDUCE(arr,TOCOL(SPLIT(ins,"()")),LAMBDA(a,c,LET(
s,SPLIT(c,","),i,CHOOSECOLS(s,SEQUENCE(COUNTA(s)-1)),t,CHOOSECOLS(s,-1),
REDUCE(a,i,LAMBDA(a_,i_,IF(i_=0,{IF(SEQUENCE(ROWS(a)),t),IF(SEQUENCE(ROWS(a),COLUMNS(a)-1),)},)&
TO_TEXT(a_)&IF(SEQUENCE(1,COLUMNS(a))=i_,IF(a="",,t),)))))),LAMBDA(r,JOIN(,r))))
并按如下方式使用它:
=F(A2:F8,"(1,3,~~~)(0,2,4,6,~)(5,~~)")
这意味着:在第 1 列和第 3 列之后插入
~~~
,在第 1 列之前和第 2、4、6 列之后插入 ~
,在第 5 列之后插入 ~~
。
您还可以直接在公式中定义函数:
=ARRAYFORMULA(LET(
F,LAMBDA(arr,ins,BYROW(REDUCE(arr,TOCOL(SPLIT(ins,"()")),LAMBDA(a,c,LET(
s,SPLIT(c,","),i,CHOOSECOLS(s,SEQUENCE(COUNTA(s)-1)),t,CHOOSECOLS(s,-1),
REDUCE(a,i,LAMBDA(a_,i_,IF(i_=0,{IF(SEQUENCE(ROWS(a)),t),IF(SEQUENCE(ROWS(a),COLUMNS(a)-1),)},)&
TO_TEXT(a_)&IF(SEQUENCE(1,COLUMNS(a))=i_,IF(a="",,t),)))))),LAMBDA(r,JOIN(,r)))),
F(A2:F8,"(1,3,~~~)(0,2,4,6,~)(5,~~)")))