VBA: Как использовать массив для извлечения соответствующего значения из другого массива?

#excel #vba

#excel #vba

Вопрос:

У меня есть два массива — один, содержащий доход за каждый год (R), а второй, содержащий соответствующую маржу свободного денежного потока (FCF). Я хочу создать простую функцию, которая будет выводить соответствующую маржу FCF, когда доход превысит 2 миллиарда долларов.

 Function YearSalesSurpassTwoBillion(R As Range, FCF As Range)

Dim i As Integer

For i = 1 To R.Columns.Count

    If R(i) >= 2000 Then Exit For
Next i

YearSalesSurpassTwoBillion = FCF(i)

End Function
 

Комментарии:

1. это сделает простой индекс / совпадение. Действительно ли vba необходим?

2. Вероятно, это можно сделать в Excel, но я пытаюсь изучить основы VBA.

3. Здесь вы не используете массивы — вы получаете прямой доступ к диапазонам рабочих листов.

Ответ №1:

Здесь вы не используете массивы — вы получаете прямой доступ к диапазонам рабочих листов.

Если вы хотите использовать массивы:

 Function YearSalesSurpassTwoBillion(R As Range, FCF As Range)
    Dim i as Long, arrR, arrFCF

    arrR = R.Value       'get 2-D arrays...
    arrFCF = FCF.Value

    For i = 1 To UBound(arrR, 2)
        If arrR(1, i) >= 2000 Then 
            YearSalesSurpassTwoBillion = arrFCF(1, i)
            Exit For
        End If
    Next i
End Function
 

Комментарии:

1. Спасибо, Тим, но не работает. Во-первых, я получил ошибку компиляции: «повторяющееся объявление в текущей области» в результате присвоения Dim i как Long, а затем как целое число. Во-вторых, массивы расположены горизонтально, поэтому я не думаю, что это работает. Я попытался изменить ваш код, чтобы он работал, например, от 1 до UBound(1, arrR) и то же самое для arrFCF(1, i), но не сработало.

2. Это делает его временным. Большое вам спасибо.