↑ 关于函数数组,这篇教程足够经典
我举个例子。
有两个一维数组:
{1;2;12}{"a";"b";"ab"}
需要将它们合并成一个一维数组:
{1;2;12;"a";"b";"ab"}
如果需要将两个一维数组合并成二维数组,可以用IF函数:
=IF({1,0},{1;2;12},{"a";"b";"ab"})
而合并成一维数组呢?
也可以用IF函数。
公式看不全可以左右拖动...▼
=IF(ROW(1:6)<4,{1;2;12},LOOKUP(ROW(1:6),ROW(4:6),{"a";"b";"ab"}))
公式判断ROW(1:6)是否小于4,如果条件成立则返回第1个一维数组{1;2;12},否则运行LOOKUP函数。
LOOKUP的查找值是ROW(1:6),查找区域是ROW(4:6),ROW(1:3)查无结果返回错误值,ROW(4:6)返回第2个一维数组{"a";"b";"ab"}
因此以上公式等同于:
=IF(ROW(1:6)<4,{1;2;12},{#N/A;#N/A;#N/A;"a";"b";"ab"})
于是最终返回一维数组:
{1;2;12;"a";"b";"ab"}
……
这是2个一维数组合并,如果是3个、4个……更多个呢?
比如,将下图所示A1:C3区域3个纵向一维数组合并为E1:E9所示的一个纵向一维数组。
这时候继续使用IF+LOOKUP的函数组合就不是很方便了。
更推荐使用FILTERXML+TEXTJOIN的组合套路。
TEXTJOIN是2019开始才有的函数 ▼
=FILTERXML("<a><b>"&TEXTJOIN("</b><b>",1,TRANSPOSE(A1:C3))&"</b></a>","a/b")
首先使用TRANSPOSE函数将A1:C3转置,然后使用TEXTJOIN函数以</b><b>为分隔符合并,最后用FILTERXML按"a/b"为节点拆分——这个解释如果看不懂的话,看我手指的方向👇回看一下FILTERXML函数教程吧,微微笑
(* ̄︶ ̄)
↑ FILTERXML函数
联系客服