Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA如何找到最近的数字_Excel_Vba_Range_Max - Fatal编程技术网

Excel VBA如何找到最近的数字

Excel VBA如何找到最近的数字,excel,vba,range,max,Excel,Vba,Range,Max,我有一个范围(以一定的间隔变化)。对于每一个变化,我想找出最接近0.5的范围内的数字,无论是在上行还是下行。例如,如果我有: 0.42 0.48 0.51 0.53 我想拿0.48和0.51 现在我有这个代码: Set Rng = Sheet1.Range("L" & FirstRow & ":L" & RangeCount) MaximumInRange = WorksheetFunction.Max(Rng) 我正在计算范围内的最大值,但它非常无用。我不知道如何

我有一个范围(以一定的间隔变化)。对于每一个变化,我想找出最接近0.5的范围内的数字,无论是在上行还是下行。例如,如果我有: 0.42 0.48 0.51 0.53

我想拿0.48和0.51

现在我有这个代码:

 Set Rng = Sheet1.Range("L" & FirstRow & ":L" & RangeCount)
 MaximumInRange = WorksheetFunction.Max(Rng)
我正在计算范围内的最大值,但它非常无用。我不知道如何获取最大值<0.5,最小值>0.5


谢谢

您只需在范围内循环,通过检查确定数字是否比上一个更好地满足您的标准:

Dim Cl As Range

' Arbitrarily set min and max values (maybe replace this with the min and max values of the range):
MinVal = 0
MaxVal = 100
For Each Cl In Rng
  If 0.5 - Cl < 0.5 - MinVal And Cl < 0.5 Then MinVal = Cl
  If Cl - 0.5 < MaxVal - 0.5 And Cl > 0.5 Then MaxVal = Cl
Next Cl

' Output the values however you need them:
Debug.Print MinVal
Debug.Print MaxVal
Dim Cl As范围
'任意设置最小值和最大值(可能替换为该范围的最小值和最大值):
最小值=0
最大值=100
对于Rng中的每个Cl
如果0.5-Cl<0.5-MinVal和Cl<0.5,则MinVal=Cl
如果Cl-0.50.5,则MaxVal=Cl
下一个Cl
'根据需要输出值:
调试。打印最小值
调试。打印MaxVal
这可能会有帮助:

Function BestStraddle(R As Range, target As Double) As Variant
    'Returns a variant array which consists
    'of the largest value < target and
    'smallest value > target

    Dim c As Range
    Dim v As Variant, lower As Variant, upper As Variant

    For Each c In R.Cells
        v = c.Value
        If v < target Then
            If IsEmpty(lower) Then
                lower = v
            ElseIf lower < v Then
                lower = v
            End If
        ElseIf v > target Then
            If IsEmpty(upper) Then
                upper = v
            ElseIf upper > v Then
                upper = v
            End If
        End If
    Next c

    BestStraddle = Array(lower, upper)

End Function

然后将0.48和0.51打印到即时窗口。

如果所有数字都低于0.5或所有数字都高于0.5,该怎么办?如果存在1个或2个等于0.5的数字,该怎么办?我肯定有下面和上面的数字,我肯定没有数字=0.5数字之间的分隔符是什么?空间?不,是细胞。它是一列单元格,每个单元格包含一个数字。如您所见,包含这些单元格的范围已在我的代码中定义。谢谢John,非常感谢!
Sub test()
    Dim A As Variant
    A = BestStraddle(Range("A1:A4"), 0.5)
    Debug.Print A(0)
    Debug.Print A(1)
End Sub