溢出范围:使用@ 将数组转换为交集值

jda*_*aw1 6 excel spill-range

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

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

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

所以一个候选公式是:

= IF($B$4#>$D$2#, @GCD(@$B$4#, @$D$2#), "·")
Run Code Online (Sandbox Code Playgroud)

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#)
Run Code Online (Sandbox Code Playgroud)

请提出建议。

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

谢谢你。

Axu*_*ary 2

广泛使用还需要一段时间,但这可以通过递归来完成LAMBDA

\n

设置名称

\n
gcdArray =LAMBDA(vData,hData,vIndex,hIndex,\n     LET(vSq,SEQUENCE(COUNT(vData)), \n         hSq,SEQUENCE(1,COUNT(hData)),\n         g, GCD(INDEX(vData,vIndex),INDEX(hData,hIndex)),\n         vFrame, IF(vIndex < COUNT(vData), IF(hIndex=1, gcdArray(vData, hData, vIndex+1, hIndex),""),""),\n         hFrame, IF(hIndex < COUNT(hData), gcdArray(vData, hData, vIndex, hIndex+1),""),\n         IF(vIndex=vSq,IF(hIndex=hSq,g,hFrame),vFrame)))\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

可以修改它以评估一般类似的 2D 函数。设置名称

\n
eval2Drecur =LAMBDA(func,vData,hData,vIndex,hIndex,\n    LET(vSq,SEQUENCE(COUNT(vData)),\n        hSq,SEQUENCE(1,COUNT(hData)),\n        y, func(INDEX(vData,vIndex),INDEX(hData,hIndex)),\n        vFrame, IF(vIndex < COUNT(vData),IF(hIndex = 1, eval2Drecur(func, vData, hData, vIndex+1, hIndex),""),""),\n        hFrame, IF(hIndex < COUNT(hData), eval2Drecur(func, vData, hData, vIndex, hIndex+1),""),\n        IF(vIndex=vSq,IF(hIndex=hSq,y,hFrame),vFrame))) \n\n nameGCD =LAMBDA(x, y, GCD(x,y))\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

MAKEARRAY 函数更新

\n

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

\n
=MAKEARRAY(ROWS(B4#),COLUMNS(D2#),LAMBDA(a, b,\n     LET(c,INDEX(B4#,a),\n         d,INDEX(D2#,b),\n         IF(c>d, GCD(c, d), "\xc2\xb7"))))\n
Run Code Online (Sandbox Code Playgroud)\n