A、B、C 列的值为:
A B C
--------------
A A A
B B B
C C C
D D E
E E E
如何在每一列中随机化以使任何行都不包含相同的项目?
例如,手动完成的解决方案可以是-
A B C
--------------
A E C
B D E
C B A
D C E
E A B
答案1
我不知道 Microsoft Excel 中是否存在“根据约束排列列单元格”对话框。正如 Burgi 所指出的,您可以编写脚本来让 Execel 完全按照您的意愿行事。
如果您以前从未编写过脚本或进行过任何编程,请至少留出一天时间。这是一项巨大的时间投资,但从长远来看会有所回报。您的新技能还将使您能够更有效地解决 Excel 中的其他问题。
首先编写一个脚本来检查单元格 B1 是否与单元格 A1 冲突。然后编写一个脚本来将 B1 与 B2 到 B5 之间的另一个单元格进行交换。然后使交换受制于 B1 的新内容解决与 A1 的先前冲突的约束。如果您希望它更加随机,不要只选择第一个适合的单元格,而是从所有合适的单元格中随机选择。这样做的一种方法是首先计算有多少个单元格符合约束,获取该范围内的随机整数 i,然后再次扫描 B 列,这次停在适合交换的第 i 个单元格处。然后编写一个循环来迭代 B 列的所有单元格,并修改之前的代码,使其不仅适用于 B1,还适用于 B 列中的任何其他单元格。只与更下方的单元格进行交换。与已经检查过的单元格进行交换意味着您必须再次检查这些单元格,并且您可能会陷入循环,即使存在解决方案也找不到解决方案。一旦您掌握了这一点,您就会发现扩展脚本以处理 C 列也很容易。最后,学习如何报告错误情况,例如没有合适的单元格可用。(您的示例中的 6 个 E 将是一个合适的测试用例。)