在 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) — 希望这无关紧要。)
谢谢你。
广泛使用还需要一段时间,但这可以通过递归来完成LAMBDA。
设置名称
\ngcdArray =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)))\nRun Code Online (Sandbox Code Playgroud)\n然后使用=gcdArray(B4#, D2#, 1, 1)
可以修改它以评估一般类似的 2D 函数。设置名称
\neval2Drecur =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))\nRun Code Online (Sandbox Code Playgroud)\n然后打电话=eval2Drecur(nameGCD, B4#, D2#, 1, 1)
MAKEARRAY仍处于测试阶段。当它发布时,它将简化答案。
=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"))))\nRun Code Online (Sandbox Code Playgroud)\n