我在一个单元格中有一个数组公式,可以输出一些2D数组:
{={"a","b","c"; 1, 2, 3}}
(当然更加复杂,但这是我逐步完成的最后一步)
此刻,我包装此结果以返回格式化的字符串,如下所示:
{="{" & TEXTJOIN(", ",TRUE,{"a","b","c";1,2,3}) &"}"}
哪个返回{a, b, c, 1, 2, 3}
作为字符串。这几乎是我想要的,但是数组变平了,由于缺少;
分号,因此无法在两行之间进行区分。我不在乎用""
来转义字母-我的实际用例是所有整数
有没有一种方法可以将2D数组转换为某种字符串,并保留行的区别?理想情况下,不必多次重新引用该数组,因为我没有足够的空间容纳中间数组,并且多次重新计算会有些效率低。
首先我的实际公式是
{="{" & TEXTJOIN(", ",TRUE,INDIRECT([@Pt2])*INDIRECT([@Pm2])*INDIRECT([@Pb3])*INDIRECT([@Nt4])*INDIRECT([@Nm5])*INDIRECT([@Nb6])) &"}"}
其中[@...]
指向命名范围的名称,每个名称范围都是6x3的整数0到2的矩阵。因此,该公式计算6个不同2D数组的元素乘积并将其输出为数组。也许您可以想到一种更好的方法来解决此问题,但是我一直在尝试遵循KISS的心态,这似乎是我最明显的方法。
所以我想要的是按元素乘积的数组输出
{0,2,0,0,2,1
0,2,2,1,1,0
0,0,0,1,1,0}
成为字符串"{0,2,0,0,2,1;0,2,2,1,1,0;0,0,0,1,1,0}"
或任何其他单个单元格明确的2D数组表示形式。希望有道理:)
答案 0 :(得分:0)
看来TEXTJOIN()
没有“看到”输入的2D结构。但是,如果您在 A1 中输入(或数组输入):
={"a","b","c";1,2,3}
,然后安装这个小的UDF:
Public Function joyn(rng As Range) As String
v = rng.Value
s = ""
For i = LBound(v, 1) To UBound(v, 1)
s = s & IIf(s = "", "", ";")
For j = LBound(v, 2) To UBound(v, 2)
s = s & v(i, j) & IIf(j = UBound(v, 2), "", ",")
Next j
Next i
joyn = s
End Function
,然后在某些单元格中:
=joyn(A1:C2)
我们看到:
EDIT#1:
如果您想直接包装一个数组常量,并且确定它是二维数组,那么我们可以跳过范围数组的步骤:
Public Function joynAC(v As Variant) As String
Dim s As String, i As Long, j As Long
s = ""
For i = LBound(v, 1) To UBound(v, 1)
s = s & IIf(s = "", "", ";")
For j = LBound(v, 2) To UBound(v, 2)
s = s & v(i, j) & IIf(j = UBound(v, 2), "", ",")
Next j
Next i
joynAC = s
End Function