Страницы: 1
RSS
VBA: определение порядкового номера элемента по условию
 
Здравствуйте.  
Необходима помощь в создании функции, которая должна определять порядковый номер элемента в диапазоне, вместе с которым накопительная сумма всех предыдущих элементов становится равной либо превышает заданный критерий.

Во вложении пример массива (D2:H2)
Задан критерий (целевое значение суммы элементов): E4= 370
Функция начинает последовательно суммировать элементы массива, начиная с первого до тех пор, пока сумма элементов не станет равной или превысит 370. Выводит номер порядковый номер элемента, при котором выполнилось данное условие. В данном случае условие выполнилось на элементе №3.
Спасибо.
 
Добрый день.
Как-то так, наверное:
Код
Function ElementsCount(Диапазон As Range, Критерий As Double)
    Dim objC As Range
    Dim intI As Integer
    Dim dblT As Double
        For Each objC In Диапазон
            intI = intI + 1
            dblT = dblT + objC
                If dblT >= Критерий Then
                    ElementsCount = intI
                    Exit Function
                End If
        Next objC
End Function
Кому решение нужно - тот пример и рисует.
 
Без массивов и прочих словарей
Код
Function НОМЭЛЕМЕНТА(rng As Range, kr As Long) As Long
    For I = 1 To rng.Count
        S = S + rng(I).Value
        If S >= kr Then
            НОМЭЛЕМЕНТА = I
            Exit Function
        End If
    Next
End Function
Согласие есть продукт при полном непротивлении сторон
 
Пытливый, спасибо. На дальнейших примерах все корректно сработало.
Sanja, почему то некорректно работает на следующем примере. Прикладываю.
 
Код
Function НОМЭЛЕМЕНТА(rng As Range, kr As Double) As Double
    For I = 1 To rng.Count
        S = S + rng(I).Value
        If S >= kr Then
            НОМЭЛЕМЕНТА = I
            Exit Function
        End If
    Next
End Function
Согласие есть продукт при полном непротивлении сторон
 
VBA обязательно?
=ПОИСКПОЗ(E4-1;СУММЕСЛИ(СМЕЩ(D2;;;;СТОЛБЕЦ(D2:H2)-СТОЛБЕЦ(D2)+1);"<>"))+1
формула массива (Ctrl+Shift+Enter)
Страницы: 1
Читают тему
Наверх