|
以下のように、単純に1つずつ比較していくだけでいいのでは?
Type 項目
時間 As Date
値 As Long
End Type
Sub Macro1()
Const 計算結果 As Long = 280
Dim 配列() As 項目
Dim i As Long
Dim 検索結果 As Long
ReDim 配列(2)
配列(0).時間 = TimeValue("13:00"): 配列(0).値 = 100
配列(1).時間 = TimeValue("12:00"): 配列(1).値 = 450
配列(2).時間 = TimeValue("9:00"): 配列(2).値 = 300
' ReDim 配列(2000)
'
' Randomize
'
' For i = 0 To UBound(配列)
' 配列(i).時間 = Rnd()
' Do
' 配列(i).値 = Rnd() * 計算結果 * 2
' Loop Until 配列(i).値 <> 計算結果
' Next
MsgBox "検索を開始します。", vbInformation
For i = 0 To UBound(配列)
If Abs(配列(i).値 - 計算結果) < Abs(配列(検索結果).値 - 計算結果) Then
検索結果 = i
If 配列(i).値 = 計算結果 Then Exit For
End If
Next
MsgBox 計算結果 & " に最も近いのは配列(" & 検索結果 & ")の " & _
配列(検索結果).値 & " で、時間は " & Format(配列(検索結果).時間, "h:mm") & " です。"
End Sub
|
|