谢谢您的快速回答。
我确实在VBA中完成了它,但没有用你的方法。我使用的基本逻辑对我的数据应用来说工作得很好。代码可能不是最优的,但我相当满意。
下面是代码:
私人小组peak_find()
Dim j, k As Integer
Dim t As Double
j = 0
Do While Not IsEmpty(ActiveCell.Value)
If ActiveCell.Value = ActiveCell.Offset(1, 0).Value Then
k = 0
Do While ActiveCell.Value = ActiveCell.Offset(k, 0).Value
k = k + 1
Loop
If ActiveCell.Value > ActiveCell.Offset(k, 0).Value And ActiveCell.Value > ActiveCell.Offset(-1, 0).Value And ActiveCell.Value > 0 Then
k = k - 1
Range("E1").Offset(j, 0).Value = ActiveCell.Value
t = (ActiveCell.Offset(0, -1).Value + ActiveCell.Offset(k, -1))/2
Range("D1").Offset(j, 0).Value = t
j = j + 1
ElseIf ActiveCell.Value < ActiveCell.Offset(k, 0).Value And ActiveCell.Value < ActiveCell.Offset(-1, 0).Value And ActiveCell.Value < 0 Then
k = k - 1
Range("G1").Offset(j, 0).Value = ActiveCell.Value
t = (ActiveCell.Offset(0, -1).Value + ActiveCell.Offset(k, -1).Value)/2
Range("F1").Offset(j, 0).Value = t
ElseIf ActiveCell.Value > ActiveCell.Offset(k, 0).Value And ActiveCell.Value < ActiveCell.Offset(-1, 0).Value Then
End If
ElseIf ActiveCell.Value > ActiveCell.Offset(1, 0).Value And ActiveCell.Value > ActiveCell.Offset(-1, 0).Value Then
Range("E1").Offset(j, 0).Value = ActiveCell.Value
Range("D1").Offset(j, 0).Value = ActiveCell.Offset(0, -1).Value
j = j + 1
ElseIf ActiveCell.Value < ActiveCell.Offset(1, 0).Value And ActiveCell.Value < ActiveCell.Offset(-1, 0).Value Then
Range("G1").Offset(j, 0).Value = ActiveCell.Value
Range("F1").Offset(j, 0).Value = ActiveCell.Offset(0, -1).Value
End If
ActiveCell.Offset(1, 0).Activate
Loop
Range("D1").Activate
末次
它可能是,如果我避免与活细胞的工作速度更快,但我会在有效的后来。它为我节省了很多时间。