我用的笨方法
Public Function Time2(str1 As String, str2 As String) As String
Dim i As Long
Dim Tmp() As String
Dim tmp2 As Integer
     For i = 0 To UBound(Tmp())
        If str1 = Tmp(i) Then Time2 = Tmp(i): Exit Function
        If TimeEdit(Tmp(i)) > TimeEdit(str1) Then
            If tmp2 = 0 Then Time2 = Tmp(i): Exit Function
                a = TimeEdit(Tmp(i)) - TimeEdit(str1)
                b = TimeEdit(str1) - tmp2
            If a >= b Then
                Time2 = Tmp(i - 1): Exit Function
            Else
                Time2 = Tmp(i): Exit Function
            End If        Else
            tmp2 = TimeEdit(Tmp(i))
        End If
    Next
End Function注意!TimeEdit()函数是一个数字转换函数,不需要理解它
虽然正确但是非常不满意!

解决方案 »

  1.   

    Option ExplicitPrivate Sub Command1_Click()
        Dim aa(4) As Variant
        aa(0) = 1
        aa(1) = 4
        aa(2) = 9
        aa(3) = 11
        aa(4) = 14
        MsgBox GetMin(aa(), 10)
    End Sub'DataArray 是一维数组
    Function GetMin(DataArray As Variant, Num As Integer) As Integer
        Dim i As Integer
        Dim OldNum As Integer
        Dim TempNum As Integer
        Sort DataArray
        For i = 0 To UBound(DataArray)
            If i = 0 Then
                TempNum = DataArray(i)  '第一次
            End If
            OldNum = IIf(Abs(DataArray(i) - Num) < Abs(OldNum - Num), DataArray(i), OldNum)
        Next i
        GetMin = OldNum
    End Function'数组排序
    Sub Sort(List As Variant)
        Dim First As Integer, Last As Integer
        Dim i As Integer, j As Integer
        Dim Temp As Integer
        
        First = LBound(List)
        Last = UBound(List)
        For i = First To Last - 1
            For j = i + 1 To Last
                If List(i) > List(j) Then
                    Temp = List(j)
                    List(j) = List(i)
                    List(i) = Temp
                End If
            Next j
        Next i
    End Sub
      

  2.   

        Dim Temp(4) As Integer
        Dim n As Integer
        Dim i As Integer
        Dim m As Integer
        Dim tempC As Integer
        Dim c As Integer
        Temp(0) = 2
        Temp(1) = 5
        Temp(2) = 7
        Temp(3) = 12
        n = 3
        tempC = 100
        For i = 0 To 4
            c = Abs(Temp(i) - n)
            If tempC > c Then
                tempC = c
                m = Temp(i)
            ElseIf tempC = c Then
                If Temp(i) < m Then
                    m = Temp(i)
                End If
            End If
        Next i
        MsgBox m
      

  3.   

    如果是杂乱的数组拿是先排序在用2分法处理是吗?javanj()兄弟,你说的类比是全部比较一遍吧?有例子研究一下吗?-
      

  4.   

    dim arrFind() as integer       '要比较的数组
    'set value to array arrFind()
    dim i as integer
    dim idiv as integer,idiv1 as integer
    dim iVal as integer           '最接近的值
    dim iCheck as integer         '要比较的数据
    idiv=abs(arrFind(0)-iCheck)
    iVal=arrFind(0)
    for i=lbound(arrFind())+1 to Ubound(arrFind())
       idiv1=abs(arrfind(i)-iCheck)
       if idiv1<idiv then
          idiv=idiv1
          iVal=arrFind(i)
       else if idiv1=idiv then
          if arrFind(i)<iVal then iVal=arrFind(i)
       endif
       if idiv=0 then exit for        '如果找到一样的数值就退出循环
    next i使用这种方法,遍历一遍就行了。
      

  5.   

    eaglezhao(笨小子)的算法是最好的。推荐使用。