search最近的较低数字

我正在寻找一个更简单的方法if(searchNum – result)<0,结果将使用数组内的较小的值。 例如9000-10000 = -1000,因为结果是负数,它将使用数组中的下面的variables… 9000-7083 = 1917

这个代码正在工作,但有无论如何只是它?

Dim numbers(), arrItem, maxItem, result, searchNum, minItem For x = 5 To 10 'search number searchNum = Cells(x, 3) - Cells(x, 4) numbers = Array(1, 4167, 4583, 5417, 7083, 10000, 14583, 25000) 'get max of array item maxItem = Application.Max(numbers) 'loop through each array item For Each arrItem In numbers If Abs(searchNum - arrItem) < maxItem Then maxItem = Abs(searchNum - arrItem) result = arrItem If (searchNum - result) < 0 Then If result = 25000 Then Cells(x, 6) = searchNum - 14583 ElseIf result = 14583 Then Cells(x, 6) = searchNum - 10000 ElseIf result = 10000 Then Cells(x, 6) = searchNum - 7083 ElseIf result = 7083 Then Cells(x, 6) = searchNum - 5417 ElseIf result = 5417 Then Cells(x, 6) = searchNum - 4583 ElseIf result = 4583 Then Cells(x, 6) = searchNum - 4167 ElseIf result = 4167 Then Cells(x, 6) = searchNum - 1 End If End If End If Next arrItem Next 

预先感谢

在sorting数组中search最接近的较低值是当使用TRUE作为最后一个参数时VLOOKUP / HLOOKUP所做的。

VBA中的数组函数生成一个“水平”1维数组,因此您可以使用HLOOKUP查找searchNum的最接近的较低值。

你只需要首先检查处理的情况下,searchNum小于数字中的最小值会引发错误。 之后,您可以直接分配结果:

 Cells(x,6) = searchNum - WorksheetFunction.HLookup(searchNum, numbers, 1, 1)