Excel - 找到具有多单元峰的局部最大值

Hig*_*ce2 6 microsoft-excel

我想用 Excel 在一个巨大的数据集中找到一个局部最大值,我一直在尝试的方法是比较前一个和下一个值以确保它们更小,例如:

=IF(AND(C4>C3,C4>C5),"Local maxima","")
Run Code Online (Sandbox Code Playgroud)

但是这个公式的问题在于,如果峰值跨越多行,它不会将其作为局部最大值捕捉到。尽管事实上它是一个局部最大值,因为值开始下降。

(如果你想知道为什么要在一组频谱数据中找到局部最大值)

F10*_*art 1

你走在正确的轨道上!您可以使用几个辅助列来完成此操作。请参见下图。

第一个辅助列“slope”使用 Excel 的 SLOPE 函数。它计算两个相邻点之间的斜率。

第二个辅助列“用于标签”,检查从正斜率到负斜率的转换。从正斜率到负斜率的转变被标记为“最大”。

然后,您可以使用如下宏来用这些最大值标记图形:

Sub CustomLabels()

   Dim i, myCount, pt
   ActiveSheet.ChartObjects("myChart").Activate
   myCount = ActiveChart.SeriesCollection(1).Points.Count

   For i = 1 To myCount
       ActiveChart.SeriesCollection(1).Points(i).ApplyDataLabels
       ActiveChart.SeriesCollection(1).Points(i).DataLabel.Text = Range("D" & i + 1).Value
   Next i

End Sub
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述