将2D数组公式输出为格式化字符串

问题描述 投票:1回答:1

我在一个单元格中有一个数组公式,可以输出一些2D数组:

{={"a","b","c"; 1, 2, 3}}

(当然更复杂,但这是我完成的最后一步)

目前,我包装此结果以返回格式化的字符串,如下所示:

{="{" & TEXTJOIN(", ",TRUE,{"a","b","c";1,2,3}) &"}"}

哪个返回{a, b, c, 1, 2, 3}作为字符串。这几乎是我想要的,但是数组变平了,由于缺少;分号,因此无法区分两行。我不在乎用""来转义字母-我的实际用例是所有整数

是否有一种方法可以将2D数组转换为某种字符串,并保留行的区别?理想情况下,不必多次重新引用该数组,因为我没有足够的空间放置中间数组,并且多次重新计算会有些效率低下。


FWIW我的实际公式是

{="{" & 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数组表示形式。希望有道理:)

arrays excel array-formulas excel-2019
1个回答
0
投票

TEXTJOIN()似乎没有“看到”输入的2D结构。但是,如果在A1:中输入(或array-enter)

={"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)

我们看到:

enter image description here

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
© www.soinside.com 2019 - 2024. All rights reserved.