我有以下列表: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
我可以使用什么功能?
我的想法是循环浏览我的第一个列表,但是我不知道该怎么做,或者这是否可以更容易做到。
答案 0 :(得分:1)
Excel公式(值必须在A1中匹配)
=INDEX({0,6,12,24,36},MATCH(A1-1,{0,6,12,24,36},1))
答案 1 :(得分:0)
您可以将WorksheetFunction.Match method与Match_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
在读取值并将其辅助变量时,通常应该更加小心。但这现在应该可以解决问题。