EXCEL如何提取数组中的值?

如图,如何这个单元格的D bb提取出来显示在最后一列

'自定义公式-按ALT+F11-插入-模块-粘贴代码-将表格另存为启用宏的格式
Function HB(rng, Optional ByVal fgf As String = "|")
For Each cel In rng
If cel <> "" Then p = p & fgf & cel
Next
HB = Mid(p, Len(fgf) + 1)
End Function

追答

这样用也是可以的

追问

你这个自定义函数功能和PHONETIC一模一样的,虽说可以对手动敲的数组进行操作,但是不能对公式计算得到的数组进行操作,还是不得行啊

公式计算得到的数组结果一般都是在单元格内显示value#,要点进去按F9显示为数组,就是该如何从这个value#里面提取出数组的值合并在一起

追答

你的目的是为了组合你这个数组里的元素,可以用自定义公式代替你的数组公式,在源头上进行组合

追问

我不会用vb,唉

追答

表发我,写好给你,你能用就行。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-11-14

输入以下公式,将多个单元格的文本合并

=PHONETIC(C5:N5)

详见附图示例

追问

这个不好使,能不能直接从那个数组(={"","","","D","","","","","bb","","",""})里面提取

追答

将数组大括号修改为小括号,前面加上文本合并函数CONCATENATE,输入

=CONCATENATE("","","","D","","","","","bb","","","")

追问

这个={"","","","D","","","","","bb","","",""}数组是公式所得,按F9显示出来的,种数据有N行,我不能一个个手动修改大括号的,有没有办法用公式提取

第2个回答  2020-11-14
如果版本比较高,可以使用textjoin函数,合并一下,然后就可以看到了。
如果是低版本的,建议把数组处理一下,用small或者large函数来提取。但是合并数组就不好处理了。
低版本合并数组的话, 可以使用VBA来解决。追问

关键是这些数组分离不出来,只能按F9显示,顺便说一下试了那个small也不能直接对数组使用,VBA也不会

追答

你用的什么版本? 2019以上的版本有textjoin函数,可以解决内存数组的文本合并问题。
但是低版本不行,低版本的CONCATENATE函数跟 & 是一样的,只能选择单元格,不能处理内存数组。PHONETIC处理拼音的,也是只能引用位置,且不能跳单元格。
small函数可以对数组使用,需要把这个数组对应序列,然后根据序列再用small处理,总之这个公式要反复提取好几遍才可以的。你可以照这个思路试试。如果不行,欢迎继续提问。具体的需要你的原表。复杂的公式不免费。我这里VBA和复杂公式都可以写,但是要根据具体情况。
另外,如果你还是想自己处理,建议用辅助表,做一个辅助表,把数组公式放进去,然后再用PHONETIC处理就好了,前提是里边不要有数字,PHONETIC无法处理数字和时间信息,只能处理字符串。

追问

我是2016版的,把数组做成序列有序分布在N列中是可以的,但是excel表格这里行数太多,导致列数最多只能300多列,无法用small判断超过300列的数据

追答

把不符合条件是序列处理掉,只留符合条件的序列。再用small找,不用找300,只用找前边符合条件的就可以了。
如果你经常做数组公式,应该理解这个的。数组中不超过35536个元素就没问题。

追问

那怎么去掉不符合条件的序列呢,顺便说一下,我这个数组里面有值的全是符合条件的,我就想去掉那些没有值的

追答

不是,是核对一下序列号,符合条件的返回序列号,不符合条件的不返回序列号,然后序列号是有大小的,可以用small提取,然后在根据用small提取到的序列号,求对应的值。
因为无法直接合并,数组中的的空值也无法处理,所以只能用这种迂回的方案来解决。思路是这样,但是公式写起来很累。你可以好好想一想。
用excel365最新版和WPS2019有textjoin函数,excel2019应该也支持,我没试过,就可以不用这么累了,你得出这个数组就可以直接用textjoin来合并。但是没有这个函数的就得用迂回的方法来解决。