我正在使用 excel 和 vba 来查找高斯曲线的不对称性。我的数据存储在一列中。为了找到不对称性,我需要找到最大(峰高)值,然后在曲线两侧找到接近最大值 1/10 的值。为此,我迭代一次以找到最大值,然后迭代两半以查找并将值设置为对应于最大值的 1/10 的变量(closest101)。我将 (1/10)max 的差异与单元格中的值进行比较,当获得较小的差异时,单元格中的值是新的最接近匹配。我没有使用 Vlookup 或 Match 功能,因为我的数据非常嘈杂。代码如下:
'low is 1/10 max
For Each cell In halfRng
cell.Select
Debug.Print Abs(low - ActiveCell.Value)
If Abs(fifty - ActiveCell.Value) <= difference50 Then
difference50 = Abs(fifty - ActiveCell.Value)
closest501 = ws.Range("C" & ActiveCell.Row).Value
ElseIf Abs(low - ActiveCell.Value) <= difference10 Then
difference10 = Abs(low - ActiveCell.Value)
closest101 = ws.Range("C" & ActiveCell.Row).Value
Debug.Print "new lowest difference " & difference10
End If
Next cell
我也在寻找峰值高度一半的值,但在相同的逻辑下效果很好。
我遇到的问题是“逻辑”对于应该起作用的值失败了。例如,0.06 的差异小于之前的最小差异 0.3。在这种情况下,ElseIf 将为真,新的差异10将为 0.06,但它的行为就好像该条件为假一样。有什么建议么?
编辑:这是一些示例数据:
difference10 = 10000 'initial value
Low = 1
Cell.value(1) = 0.7
Abs(low - cell.value(1)) = 0.3 <= 1000
So difference10 =0.3
...
Cell.value(10) = 0.9
Abs(low - cell.value(10)) = 0.1 <= 0.3 'fails here
difference10 =0.3 'remains unchanged