Excel 中给了我一个数字列表:0,1,3,5,7,2,4,6,8,10。 此类数字的列表应遵循递增的序数。所以序数后面的数字是:0,1,3,5,7,8,10,不跟在序数后面的数字是2,4,6。现在我们必须将 2,4,6 替换为序数后面的 2 个数字(即 7 和 8)之间的等距数字。因此,2,4,6 变为 7.25、7.5 和 7.75。我们如何在 Excel 中使用公式实现这个逻辑,而不使用 VBA?
我无法超越第一步本身,那就是找到序数。我尝试过:
=IF(AND(A2>A1,A2>A3),"Correct","Broken")
。但这给出了 7,2,10 作为“Broken”,这不是所需要的。
预期答案是 2、4、6 是“损坏”。然后应该替换为 7.25、7.5 和 7.75。
由于需要重复迭代,仅用一两个公式很难解决这个问题。换句话说,您需要对数字执行多次传递,以确定哪些数字“乱序”以及如何调整它们。
一种可能的算法可能如下所示:
这并不简单。为了帮助您入门,这里举例说明了在 Excel 中应用此方法时的外观。 (我已将列表中的第一个数字从 0 更改为 0.1,以清楚地区分方框单元格中的三个零,这些单元格构成这些列的计算的一部分。两个蓝色单元格分别指 B4 和 C13。)
第4行的公式如下。每个公式都复制到表格的整个高度。
你当然可以压缩其中的一些,但我已经将其分解,以便你可以看到算法是如何工作的。您可能需要根据您的具体需求进行调整。
关于此方法的一些警告:
增加序数是唯一的要求。这意味着,如果列表中的第三个数字非常大(例如 100),它仍然会被视为“按顺序”,而所有后续数字“不按顺序”。
假设列表中的第一个和最后一个数字排序正确(否则列表末端的相应间隔将没有“界限”)。