6

在 Excel 引入溢出范围之前,在“<code>@”运算符之前,可以使用“<code>0+”(数值)或“<code>”“&”(字符串)将范围“转换”为单个值)。但“<code>@”并不完全相同。

假设有一列从 B4 向南的正整数;从 D2 向东有一排正整数;并且 A 列和 C 列以及第 1 行和第 3 行完全为空。

目的是在 D4 中放入一个单一的溢出公式,参考类似的东西$B$4#$D$2#当列整数大于行整数时,计算两个整数的成对最大公约数。每个所需的溢出单元都是只有两个整数的成对GCD 。

所以一个候选公式是:

= IF($B$4#>$D$2#, @GCD(@$B$4#, @$D$2#), "·")

GCD,看到两个数组参数,而不是从两个数组中提取/相交的两个值,因此计算所有这些整数的 GCD,不可避免地返回1. 叹。

确实,接下来的几个甚至没有溢出。

= @IF(@$B$4#>@$D$2#, GCD(@$B$4#, @$D$2#), "·")
= IF(@$B$4#>@$D$2#, @GCD(@$B$4#, @$D$2#), "·")
= @IF($B$4#>$D$2#, @GCD(@$B$4#, @$D$2#), "·")
= GCD($B$4#, $D$2#)
= GCD(@$B$4#, @$D$2#)

请提出建议。

(Mac Excel 16.32 (19120802)——希望这无关紧要。)

谢谢你。

4

1 回答 1

2

这需要一段时间才能广泛使用,但这可以通过递归LAMBDA.

设置名称

gcdArray =LAMBDA(vData,hData,vIndex,hIndex,
     LET(vSq,SEQUENCE(COUNT(vData)), 
         hSq,SEQUENCE(1,COUNT(hData)),
         g, GCD(INDEX(vData,vIndex),INDEX(hData,hIndex)),
         vFrame, IF(vIndex < COUNT(vData), IF(hIndex=1, gcdArray(vData, hData, vIndex+1, hIndex),""),""),
         hFrame, IF(hIndex < COUNT(hData), gcdArray(vData, hData, vIndex, hIndex+1),""),
         IF(vIndex=vSq,IF(hIndex=hSq,g,hFrame),vFrame)))

然后使用=gcdArray(B4#, D2#, 1, 1)

这可以修改为通常评估类似的 2D 函数。设置名称

eval2Drecur =LAMBDA(func,vData,hData,vIndex,hIndex,
    LET(vSq,SEQUENCE(COUNT(vData)),
        hSq,SEQUENCE(1,COUNT(hData)),
        y, func(INDEX(vData,vIndex),INDEX(hData,hIndex)),
        vFrame, IF(vIndex < COUNT(vData),IF(hIndex = 1, eval2Drecur(func, vData, hData, vIndex+1, hIndex),""),""),
        hFrame, IF(hIndex < COUNT(hData), eval2Drecur(func, vData, hData, vIndex, hIndex+1),""),
        IF(vIndex=vSq,IF(hIndex=hSq,y,hFrame),vFrame))) 

 nameGCD =LAMBDA(x, y, GCD(x,y))

然后打电话=eval2Drecur(nameGCD, B4#, D2#, 1, 1)

MAKEARRAY 函数的更新

MAKEARRAY仍处于测试阶段。当它发布时,它将简化答案。

=MAKEARRAY(ROWS(B4#),COLUMNS(D2#),LAMBDA(a, b,
     LET(c,INDEX(B4#,a),
         d,INDEX(D2#,b),
         IF(c>d, GCD(c, d), "·"))))
于 2021-02-21T04:14:37.377 回答