Посмотрите, между какими значениями списка данное значение - PullRequest
0 голосов
/ 24 мая 2019

У меня есть следующий список: 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 ]

1 голос
/ 24 мая 2019

Формула Excel (со значением для сопоставления в A1):

=INDEX({0,6,12,24,36},MATCH(A1-1,{0,6,12,24,36},1))
0 голосов
/ 24 мая 2019

Я предполагаю, что ваш список находится в диапазоне "A1: A36" рабочего листа с именем "MySheet".Существует несколько способов перебрать столбец, один из которых может быть:

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

Как правило, вам следует быть более осторожным при считывании значений и присвоении их переменным.Но сейчас это должно сработать.

0 голосов
/ 24 мая 2019

Вы можете использовать WorksheetFunction.Match метод в сочетании с 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...