在 Excel 中用平均值替换不遵循序数的数字的逻辑

问题描述 投票:0回答:1

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 vba logic
1个回答
0
投票

由于需要重复迭代,仅用一两个公式很难解决这个问题。换句话说,您需要对数字执行多次传递,以确定哪些数字“乱序”以及如何调整它们。

一种可能的算法可能如下所示:

  1. 执行第一遍以识别“无序”数字(始终跟踪“迄今为止最大的”数字)。
  2. 执行第二遍,计算每批中两个“正确”数字之间“错误”数字的数量。
  3. 对于每个“错误”批次,使用下限、上限和大小来计算中间间隔。

这并不简单。为了帮助您入门,这里举例说明了在 Excel 中应用此方法时的外观。 (我已将列表中的第一个数字从 0 更改为 0.1,以清楚地区分方框单元格中的三个零,这些单元格构成这些列的计算的一部分。两个蓝色单元格分别指 B4 和 C13。)

enter image description here

第4行的公式如下。每个公式都复制到表格的整个高度。

  • B4:您的原始号码
  • C4:=IF(B4>=D3,B4,D3)
  • D4:=IF(B4=C4,真,假)
  • E4:=IF(D4,C4,E5)
  • F4:=IF(D4,0,F3+1)
  • G4:=IF(D4,IF(F3>0,G3+1,0),F4)
  • H4: =IF(G4=0, 0, IF(H5>0, H5, G4))
  • I4: =IF(H4=0, 0, (E4-C3)/H4)
  • J4:=I4*G4
  • K4:=IF(J4=0,B4,C3+J4)

你当然可以压缩其中的一些,但我已经将其分解,以便你可以看到算法是如何工作的。您可能需要根据您的具体需求进行调整。

关于此方法的一些警告:

  • 增加序数是唯一的要求。这意味着,如果列表中的第三个数字非常大(例如 100),它仍然会被视为“按顺序”,而所有后续数字“不按顺序”。

  • 假设列表中的第一个和最后一个数字排序正确(否则列表末端的相应间隔将没有“界限”)。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.