2

我在单个单元格中有一个数组公式,它输出一些二维数组:

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

(当然更复杂,但如果我逐步完成,那是最后一步)

目前我正在包装这个结果以返回一个格式化的字符串,如下所示:

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

{a, b, c, 1, 2, 3}它以字符串形式返回。;这几乎是我想要的,但是数组变平了,由于缺少 - 分号,无法区分两行。我不关心转义字母""- 我的实际用例是所有整数

有没有办法将二维数组转换为某种字符串,保留行区别?理想情况下,不必多次重新引用数组,因为我没有中间数组的空间,并且多次重新计算效率会有点低。


FWIW我的实际公式是

{="{" & TEXTJOIN(", ",TRUE,INDIRECT([@Pt2])*INDIRECT([@Pm2])*INDIRECT([@Pb3])*INDIRECT([@Nt4])*INDIRECT([@Nm5])*INDIRECT([@Nb6])) &"}"}

其中[@...]指向命名范围的名称,每个命名范围是一个 6x3 的整数矩阵 0 到 2。因此,该公式计算 6 个不同二维数组的元素乘积并将其作为数组输出。也许你可以想出一个更好的方法来解决这个问题,但我一直在努力遵循 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}"或任何其他单细胞明确的二维数组表示。希望这是有道理的:)

4

1 回答 1

0

似乎TEXTJOIN()没有“看到”输入的二维结构。但是,如果您在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)

我们看:

在此处输入图像描述

编辑#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
于 2020-04-03T13:27:23.797 回答