Страницы: 1
RSS
Макрос для подсчета суммы чисел в зависимости от определенных критериев
 
Добрый день.

Люди добрые, подскажите пожалуйста.
Есть макрос (во вложении) для подсчета суммы чисел в зависимости от определенных критериев.
Функция номер 1 для расчета суммы в зависимости от столбиков (толщина и ширина)
Код
Function KList(i, P1_1a As Variant, P1_2a As Variant, P2_1a As Variant, P2_2a As Variant) As Double
'Функция обработки Толщина/Ширина
    KList = 0
    Dim P1_1, P1_2, P2_1, P2_2 As Double
    P1_1 = CDbl(Val(P1_1a))
    P1_2 = CDbl(Val(P1_2a))
    P2_1 = CDbl(Val(P2_1a))
    P2_2 = CDbl(Val(P2_2a))
    
    With ActiveSheet
        AD = CDbl(Val(.Cells(i, "AD").Text))
        AE = CDbl(Val(.Cells(i, "AE").Text))
                    If (AD >= P1_1) And (AD <= P1_2) Then
                        If (AE >= P2_1) And (AE <= P2_2) Then
                            'KList = CDbl(Val(.Cells(i, "AG").Text))
                            KList = CDbl(.Cells(i, "AG").Value)
                        End If
                    End If
    End With
End Function


Функция номер 2 для расчета суммы чисел в зависимости от веса и ширины.
Код
Function TList(i, P1_1a As Variant, P1_2a As Variant, P2_1a As Variant, P2_2a As Variant) As Double
'Функция обработки "Вес рулона Макс"/Ширина
    TList = 0
    Dim P1_1, P1_2, P2_1, P2_2 As Double
    P1_1 = CDbl(Val(P1_1a))
    P1_2 = CDbl(Val(P1_2a))
    P2_1 = CDbl(Val(P2_1a))
    P2_2 = CDbl(Val(P2_2a))
    
    With ActiveSheet
        CU = CDbl(Val(.Cells(i, "CU").Text))
        AE = CDbl(Val(.Cells(i, "AE").Text))
                    If (CU >= P1_1) And (CU <= P1_2) Then
                        If (AE >= P2_1) And (AE <= P2_2) Then
                            TList = CDbl(.Cells(i, "AG").Value)
                        End If
                    End If
    End With
End Function

Я как чайник  в этом деле пытался самостояетельно по аналогии  переделать функцию номер 2 и создать из неё функцию номер 3 так скажем. Чтобы она считала мне сумму в зависимости от веса, ширины и ТОЛЩИНЫ.

Вот что получилось.
Код
[/CODE][CODE]Function TList(i, P1_1a As Variant, P1_2a As Variant, P2_1a As Variant, P2_2a As Variant, P3_1a As Variant, P3_2a As Variant) As Double
'Функция обработки "Вес рулона Макс"/Ширина/Толщина
    TList = 0
    Dim P1_1, P1_2, P2_1, P2_2, P2_1, P2_2, P3_1, P3_2 As Double    
    P1_1 = CDbl(Val(P1_1a))
    P1_2 = CDbl(Val(P1_2a))
    P2_1 = CDbl(Val(P2_1a))
    P2_2 = CDbl(Val(P2_2a))
    P3_1 = CDbl(Val(P3_1a))
    P3_2 = CDbl(Val(P3_2a))

    With ActiveSheet
        CU = CDbl(Val(.Cells(i, "CU").Text))
        AE = CDbl(Val(.Cells(i, "AE").Text))
        AD = CDbl(Val(.Cells(i, "AD").Text))

                    If (CU >= P1_1) And (CU <= P1_2) Then
                        If (AE >= P2_1) And (AE <= P2_2) Then
                        If (AD >= P3_1) And (AD <= P3_2) Then
                            TList = CDbl(.Cells(i, "AG").Value)
                        End If
                    End If
                 End If

    End With
End Function

Но по итогу не хочет работать макрос  в таком виде. Пишет сообщение Compile Error. Argument not Optional.
 
Вы объявили переменные два раза
У Вас:
Код
Dim P1_1, P1_2, P2_1, P2_2, P2_1, P2_2, P3_1, P3_2 As Double  
А должно быть:
Код
Dim P1_1, P1_2, P2_1, P2_2, P3_1, P3_2 As Double   

И далее в главном макросе приведите параметры функции TList к правильному количеству        
Код
Result(7, 1) = Result(7, 1) + TList(i, "0.001", "10.000", "900.00", "1200.000", "1.20", "1.50")
Result(7, 2) = Result(7, 2) + TList(i, "0.001", "10.000", "1201.000", "1379.000")
Result(7, 3) = Result(7, 3) + TList(i, "0.001", "10.000", "1380.000", "1550.000")
...
Изменено: Александр Макаров - 19.10.2020 18:10:15
 
Тема: Помогите найти ошибку в макросе для подсчета суммы чисел в зависимости от определенных критериев
 
Всем спасибо и прошу прощения за некорректность в создании темы. На будущее учту.

По теме:

Александр Макаров, да там действительно была лишняя переменная и в TList нужно было добавить параметр толщины во всех случаях. Спасибо большое за подсказки.

Вопрос можно считать закрытым, разобрались.  
Изменено: Gabriel Gray - 20.10.2020 12:37:33
 
---------------------------
Microsoft Visual Basic for Applications
---------------------------
Compile error:
Duplicate declaration in current scope
---------------------------
ОК   Справка  
---------------------------
Это если сделать предварительную компиляцию проекта. И даже показывает какая переменная виновата.

P.S. и далее
---------------------------
Microsoft Visual Basic for Applications
---------------------------
Compile error:
Variable not defined
---------------------------
ОК   Справка  
---------------------------
Но это уже ладно, хотя не будет лишним объявить все, и с указанием типа если это не Variant (у Вас с этим проблема кажется...)
Изменено: Hugo - 20.10.2020 12:53:00
Страницы: 1
Наверх