【发布时间】:2022-11-03 19:10:54
【问题描述】:
所以,我正在处理另一个问题,需要检查 12 x 6 excel 范围是否有错误。如果有错误,我希望它在函数内构建一个新的 12 x 6 范围,然后检查是否有错误。我刚开始接触 Excel 中的 Lambda 函数(但我有基础知识)。我也有不使用 VBA 的限制(我知道这会更简单、更干净)。
所以我在名称管理器中创建了一个函数 LoopTest,然后在“引用”中:
=LAMBDA(X,Y,
IF(Y<=11=TRUE,
IF(X<=6=TRUE,
LoopTest(X+1,Y),
IF(Y=11,
"TEST SUCCESS",
LoopTest(0,Y+1)
)
)
)
)
然后=LoopTest(0,0)
这似乎工作正常(尽管 excel 并不允许对函数进行中间测试)。所以现在我假设我可以遍历一个范围索引(数组,X,Y)并检查单元格是否有错误。
唯一的问题是我一次只能做一个数组/表/范围。我需要弄清楚如何第一次创建一个测试数组,然后每次都将其传回,直到测试失败或完全成功(此时它返回成功范围)。我倾向于 Let() 函数来定义更多变量并将它们隐藏在一些 IF 语句后面(我没有使用 IFS,但看到其他人使用它成功。)我没有检查以下公式,但一般流程应该是正确的。
=LAMBDA(X,Y,Array1,
IF(Y<=11=TRUE,
IF(X<=6=TRUE,
IF(ISERROR(INDEX(Array1,X,Y))=FALSE,
LoopTest(X+1,Y,Array1), 'IF True continue checking Array1
Array1 = NEWARRAY 'IF False I NEED A WAY TO CREATE A NEW ARRAY AND BEGIN CHECKING IT
IF(Y=11,
Array1 'IF True Return the fully checked Array1
IF(ISERROR(INDEX(Array1,X,Y))=FALSE,
LoopTest(0,Y+1,Array1) 'IF True continue checking Array1
Array1 = NEWARRAY 'IF False I NEED A WAY TO CREATE A NEW ARRAY AND BEGIN CHECKING IT
)
)
)
)
)
目的是允许一系列具有一系列资格的名称,例如
Adam
Bill
Camp
Doug
Earl
Fred
Gabe
Hall
Ivan
Kobe
Lane
Mike
并创建一个类似于数独的独特范围(水平和垂直独特)。
Gabe Earl Fred Doug Bill Ivan
Adam Gabe Bill Lane Mike Camp
Mike Hall Kobe Bill Doug Gabe
Fred Doug Gabe Camp Kobe Mike
Camp Kobe Lane Mike Ivan Fred
Bill Lane Ivan Fred Gabe Adam
Doug Camp Adam Earl Hall Lane
Earl Adam Hall Ivan Fred Bill
Lane Ivan Mike Adam Earl Hall
Ivan Mike Camp Kobe Lane Earl
Hall Bill Doug Gabe Camp Kobe
Kobe Fred Earl Hall Adam Doug
有 6 个位置和 12 个名称,它失败的次数多于成功(猜测每个有效解决方案 100 次迭代),但我希望它继续迭代,直到 Lambda 找到一个有效的解决方案。简单的解决方案是根据来自上方和左侧的内容随机获取表格的名称,找到有效解决方案的概率约为 50/50。
【问题讨论】:
-
对我来说,不清楚你想要达到什么目的。示例数据集和预期结果会有所帮助。
-
感谢您的反馈。我将添加其他信息。
-
非常感谢,但对我来说还是太笼统了。样本输入和预期输出是我所希望的。希望其他人能够根据您所写的内容为您提供解决方案
-
谢谢。那么有没有可能你的整个帖子可以更简洁地总结为:给定 n 个名称的列表,生成一个 nxp 矩阵(p<=n),其中没有名称在给定的列或行中出现多次?话虽如此,我很欣赏您自己一直在解决这个问题,因此宁愿不把它作为一个“开放”的问题(而是想要关于如何推进您一直在开发的具体方法的建议)。不允许替代解决方案的唯一缺点似乎是您当前的方法既模糊又通用,因此可能不会引起太多关注。
-
我并不是说我不会使用基于
LAMBDA的方法。相反!
标签: excel excel-formula excel-365 excel-lambda