我在一列中有字符串(" - ")分隔数据(字母数字,可变长度),格式为......
Column A
"aaa-bbb-ccc"
"ddd-bbb-eee"
"aaa-fff-ggg"
我已经能够使用array_constrain()在其他地方返回部分数据,但这是从数组开头到数组末尾的N个元素,所以我可以...
aaa (num_cols = 1)
aaa-bbb (num_cols = 2)
aaa-bbb-ccc (num_cols = 3)
我希望从分割数据中获取最后N个元素,所以......
bbb-ccc OR
ccc
num_cols只从数组的开头到数组的后面,这对我的场景没有好处。
This answer对类似的问题建议使用regexextract()来检索最后一个值,如果我的RegEx Foo更强,那么也许我可以在正确的方向上稍微轻推一下。
我知道可以使用index(),但是一次只能从拆分数据中返回一个元素,这样就会变得混乱/低效。
所以问题是有人知道如何从数组返回最后N个元素吗?普通的排序不会起作用,但是反转阵列可能会有效。
答案 0 :(得分:0)
没有reverse
功能。我看到两种方式:
巨大的公式样本
=JOIN("-",QUERY({ArrayFormula(ROW(INDIRECT("A1:A"&COUNTA(SPLIT(A1,"-"))))),TRANSPOSE(SPLIT(A1,"-"))},"select Col2 order by Col1 desc limit 2 "))
在公式末尾更改limit 2
以获得N个最后元素。
脚本示例
试试这个:
function reverseLine(line) {
return line[0].reverse();
}
用作自定义公式:=reverseLine(B1:D1)
换行:aaa bbb ccc
返回:
ccc
bbb
aaa
答案 1 :(得分:0)
如果变量长度完全来自附加到前三个字符的格式-aaa
的集合数,则可以从前面剥离这三个字符和所需的更多集合:
=replace(A1,1,find("-",A1)*B1,"")
其中A1包含aaa-bbb-ccc
之类的内容,B1包含要删除的前三个字符的附加数量加一。