查看给定值在列表的哪些值之间

时间:2019-05-24 11:19:42

标签: excel vba

我有以下列表:6,12,24,36 和整数值1-36

例如,如果我的值为7,我想从第一个列表中退回6。

更多示例:

from 1 to 6 -> 0,
from 7 to 12 -> 6,
from 13 to 24 -> 12,
from 25 to 36 -> 24

我可以使用什么功能?

我的想法是循环浏览我的第一个列表,但是我不知道该怎么做,或者这是否可以更容易做到。

3 个答案:

答案 0 :(得分:1)

Excel公式(值必须在A1中匹配)

=INDEX({0,6,12,24,36},MATCH(A1-1,{0,6,12,24,36},1))

答案 1 :(得分:0)

您可以将WorksheetFunction.Match methodMatch_type:=1组合使用

因此,如果您定义列表

Dim LookupList As Variant
LookupList = Array(0, 6, 12, 24, 36)

您可以使用

查找您的值
Dim InputValue As Long
InputValue = 1
LookupList(WorksheetFunction.Match(InputValue - 1, LookupList, 1) - 1)

以下演示将在下面产生输出:

Option Explicit

Public Sub Demo()
    Dim LookupList As Variant
    LookupList = Array(0, 6, 12, 24, 36)

    Dim InputValue  As Long
    For InputValue  = 1 To 40
        'InputValue is the value you look for
        Debug.Print InputValue , LookupList(WorksheetFunction.Match(InputValue  - 1, LookupList, 1) - 1)
    Next InputValue 
End Sub

输出:

 i             looked up value
 1             0 
 2             0 
 3             0 
 4             0 
 5             0 
 6             0 
 7             6 
 8             6 
 9             6 
 10            6 
 11            6 
 12            6 
 13            12 
 14            12 
 15            12 
 16            12 
 17            12 
 18            12 
 19            12 
 20            12 
 21            12 
 22            12 
 23            12 
 24            12 
 25            24 
 26            24 
 27            24 
 28            24 
 29            24 
 30            24 
 31            24 
 32            24 
 33            24 
 34            24 
 35            24 
 36            24 
 37            36 
 38            36 
 39            36 
 40            36 

答案 2 :(得分:0)

我假设您的列表在名为“ MySheet”的工作表的“ A1:A36”范围内。 遍历一列有几种方法,一种是:

Option Explicit

Sub loopThroughList()
Dim c As Range
Dim rRange As Range
Dim myValue As Long
Dim myOutput As Long

Set rRange = Worksheets("MySheet").Range("A1:A36")


For Each c In rRange
    myValue = c.Value

    Select Case myValue
    Case 1 To 6
        myOutput = 0
    Case 7 To 12
        myOutput = 6
    Case 13 To 24
        myOutput = 12
    Case 25 To 36
        myOutput = 24
    End Select
Debug.Print myOutput

Next c

End Sub

在读取值并将其辅助变量时,通常应该更加小心。但这现在应该可以解决问题。