【问题标题】:Output a 2D array formula as a formatted string将二维数组公式输出为格式化字符串
【发布时间】:2020-07-15 14:21:35
【问题描述】:

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

{={"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}" 或任何其他单细胞明确的二维数组表示。希望这是有道理的:)

【问题讨论】:

  • 您使用的是什么版本的 Excel?
  • @Gary'sStudent 没有动态数组,Office 365 ProPlus 所以我猜是半年频道(1908 版)上的最新版本
  • 有趣的练习!

标签: arrays excel array-formulas excel-2019


【解决方案1】:

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

我们看到了:

编辑#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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    • 2017-03-14
    • 2021-04-07
    • 2010-10-20
    • 2023-03-11
    • 1970-01-01
    • 2021-12-17
    相关资源
    最近更新 更多