1

所以,我正在处理另一个问题,需要检查 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 并不允许对函数进行中间测试)。所以现在我假设我可以使用Index(array,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。

4

0 回答 0