在 Excel 中以公式方式填充没有水平(行)或垂直(列)重复项的数组 (table)
Filling in an array (table) with no Horizontal (row) or Vertical (column) duplicates formulaically in Excel
这可能是不可能的,但我正在尝试创建一个棒球守备阵容生成器,它具有联盟提供的一些限制(即必须在内场打两次,在外场打两次,在任何位置都不能重复)。我认为使用任何编程语言这都是相当简单的任务,但我正在为我 70 岁的叔叔设计这个,他基本上只能使用没有宏的 excel。所以我不能强行解决这个问题,我认为我对问题背后的数学理解不够好,甚至不知道是否有 excel 公式解决方案。
从本质上讲,它是一个数独创建器和求解器,在行或列中没有重复。通过按位置对个人进行排名,我对 infield/outfield 部分有一个好的解决方案。
使用 F9 进行递归计算是可行的解决方案,因为这只是选项菜单中的一个更改,但上次我向他发送宏时,他的大学 MS 帐户不让他 运行 或者更改设置。
好吧,我还有很多其他信息,并且已经接近使用巨大的嵌套 IF 的解决方案,但是这种相对蛮力的方法似乎非常愚蠢,并没有提供很好的解决方案。
感谢您的帮助!
好吧,如果你的叔叔可以访问 Excel 365(听起来很大),你可以使用排序来删除给定行或列中已经使用过的玩家,例如像这样从 B2 向下复制:
=LET(range,$L:$L,
choice,IF(COUNTIF(B:B1,range)+COUNTIF($A2:A2,range)=0,range),
count,COUNT(choice),
sort,SORT(choice),
INDEX(sort,RANDBETWEEN(1,count)))
如果给球员的是名字而不是号码,你可以试试
=LET(range,$L:$L,
choice,IF(COUNTIF(B:B1,range)+COUNTIF($A2:A2,range)=0,range),
count,SUM(--ISTEXT(choice)),
sort,SORT(choice),
INDEX(sort,RANDBETWEEN(1,count)))
这可能是不可能的,但我正在尝试创建一个棒球守备阵容生成器,它具有联盟提供的一些限制(即必须在内场打两次,在外场打两次,在任何位置都不能重复)。我认为使用任何编程语言这都是相当简单的任务,但我正在为我 70 岁的叔叔设计这个,他基本上只能使用没有宏的 excel。所以我不能强行解决这个问题,我认为我对问题背后的数学理解不够好,甚至不知道是否有 excel 公式解决方案。
从本质上讲,它是一个数独创建器和求解器,在行或列中没有重复。通过按位置对个人进行排名,我对 infield/outfield 部分有一个好的解决方案。
使用 F9 进行递归计算是可行的解决方案,因为这只是选项菜单中的一个更改,但上次我向他发送宏时,他的大学 MS 帐户不让他 运行 或者更改设置。
好吧,我还有很多其他信息,并且已经接近使用巨大的嵌套 IF 的解决方案,但是这种相对蛮力的方法似乎非常愚蠢,并没有提供很好的解决方案。
感谢您的帮助!
好吧,如果你的叔叔可以访问 Excel 365(听起来很大),你可以使用排序来删除给定行或列中已经使用过的玩家,例如像这样从 B2 向下复制:
=LET(range,$L:$L,
choice,IF(COUNTIF(B:B1,range)+COUNTIF($A2:A2,range)=0,range),
count,COUNT(choice),
sort,SORT(choice),
INDEX(sort,RANDBETWEEN(1,count)))
如果给球员的是名字而不是号码,你可以试试
=LET(range,$L:$L,
choice,IF(COUNTIF(B:B1,range)+COUNTIF($A2:A2,range)=0,range),
count,SUM(--ISTEXT(choice)),
sort,SORT(choice),
INDEX(sort,RANDBETWEEN(1,count)))