Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
28.03.2024, 19:39:31

Войти
Хотите поблагодарить участника за дельный совет? Нажмите [Повысить]. Так вы заслуженно поднимите репутацию активному участнику.
33 233 Сообщений в 5 454 Тем от 6 750 Пользователей
Последний пользователь: Alex1210
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  Функция ( добавить условие)
Страниц: [1]   Вниз
Печать
Автор Тема: Функция ( добавить условие)  (Прочитано 6314 раз)
0 Пользователей и 1 Гость смотрят эту тему.
GabrielGray
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 2


Просмотр профиля E-mail
« : 19.10.2020, 16:07:43 »

Добрый день.

Люди добрые, подскажите пожалуйста.

Есть макрос (во вложении) для подсчета суммы чисел в зависимости от определенных критериев.

Функция номер 1 для расчета суммы в зависимости от столбиков (толщина и ширина)

Код: (vb)
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 для расчета суммы чисел в зависимости от веса и ширины.


Код: (vb)
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 так скажем. Чтобы она считала мне сумму в зависимости от веса, ширины и ТОЛЩИНЫ.



Вот что получилось.

Код: (vb)
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.
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 828



Просмотр профиля WWW
« Ответ #1 : 19.10.2020, 17:00:06 »

Добрый день.
Выдержка из правил форума(Вы с ними соглашались при регистрации:
Цитировать
Название темы должно быть максимально информативным, таким, чтобы уже из названия темы другим пользователям была приблизительно понятна Ваша проблемап.п. 4.2. и 4.14. Правил форума
Поэтому придумайте название, отражающее суть проблемы - я или модераторы изменят.
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
boa
Старожил
****

Репутация: +22/-0
Офлайн Офлайн

Сообщений: 252


Доброта спасет мир...


Просмотр профиля WWW
« Ответ #2 : 19.10.2020, 22:58:22 »

Здравствуйте, GabrielGray,
в Ваших макросах столько ошибок..., что даже не хочется разбираться ((
Дублирование объявления переменных, не правильно объявленные переменные, ошибки в аргументах для зарегистрированных функций...
это не макросы, а солянка...
начните с "Option Explicit"
Правильно поставленный вопрос - это половина ответа
Записан

Ничто не обходится нам так дешево и не ценится так дорого, как вежливость...  Мигель Сервантес де Сааведра

vikttur
Глобальный модератор
Ветеран
*****

Репутация: +124/-0
Офлайн Офлайн

Сообщений: 1 816



Просмотр профиля
« Ответ #3 : 19.10.2020, 23:49:49 »

Кросс с ответом
Записан
GabrielGray
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 2


Просмотр профиля E-mail
« Ответ #4 : 20.10.2020, 12:40:57 »

Всем спасибо за участие и прошу прощения за нарушение правил при создании темы.

Макрос доисправил, работает.

closed
Записан
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru