Страницы: 1
RSS
Умножение чисел, разделенных знаком "/", Макрос
 
Всем доброго вечера.

Нашел тему, где Михаил С. выложил макрос, позволяющий суммировать числа разделенные дробью.
Как нужно изменить его, чтобы он эти числа не суммировал, а умножал. Пробовал тупо заменить + на *, но ничего не вышло.
Файл выложенный Михаилом прикрепил.
Код
Function СУМДРОБ(rn As Range) As String
    Dim a, S0&, S1&, Cel As Range
    For Each Cel In rn
        If Cel <> "" Then
            a = Split(Cel, "/")
            S0 = S0 + Val(a(0))
            If UBound(a) = 1 Then S1 = S1 + Val(a(1))
        End If
    Next
    СУМДРОБ = S0 & "/" & S1
End Function
 
что из этого всего умножение чисел???
суточные   часы работы день/ночьсумма
16/28/616/28/6=48/16
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Игорь, я всего лишь выложил файл Михаила в своем первоначальном виде для наглядности.
Оглавления в нем меня не интересуют. Мне нужно понять как изменить код, чтобы он умножал, а не складывал.
 
Цитата
умножал, а не складывал.
Код
Function ПроизвДРОБ(rn As Range) As String
    Dim a, S0&, S1&, Cel As Range
    S0 = 1: S1 = 1
    For Each Cel In rn
        If Cel <> "" Then
            a = Split(Cel, "/")
            S0 = S0 * Val(a(0))
            If UBound(a) = 1 Then S1 = S1 * Val(a(1))
        End If
    Next
    ПроизвДРОБ = S0 & "/" & S1
End Function
 
Kuzmich, Отлично, все работает. Спасибо!

Подскажите чисто ради ликбеза, - я смотрю была добавлена эта строчка, после чего умножение стало возможным.
Код
S0 = 1: S1 = 1
Что она изменила/добавила?
 
не умножение стало возможным, а умножение приобрело смысл)
S1 = S1 * Val(a(1))
умножайте
S1 на любые Val(a(1)) - в результате будет 0 если в начале S1 было равно 0
Изменено: Ігор Гончаренко - 25.05.2020 20:18:27
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
остается загадкой, что тут могло не получиться у автора???
Код
Dim a, S0&, S1&
Debug.Print S0

И где загадка?
 
Ігор Гончаренко, Я имею весьма слабое представление о макросах, на самом что ни на есть начальном уровне.

Цитата
умножайте S1 на любые Val(a(1)) - в результате будет 0 если в начале S1 было равно 0
Буду иметь ввиду.
Изменено: memo - 25.05.2020 20:32:09
 
Здравствуйте. Может так?
Код
Function PRODUCTCEL(MyRange As Range) As Double
    Dim a, P#, Cel As Range
    P = 1
    For Each Cel In MyRange
        If Cel <> "" Then
            a = Split(Cel, "/")
            If UBound(a) = 1 Then
                P = P * (Val(a(0)) / Val(a(1)))
            Else
                P = P * Val(a(0))
            End If
        End If
    Next Cel
    PRODUCTCEL = Round(P, 1#)
End Function

Изменено: DANIKOLA - 25.05.2020 21:11:35
 
DANIKOLA,
Ваш макрос делит числа разделенные знаком "/" и затем перемножает.
Мне нужно было всего лишь перемножить числа разделенные знаком "/"
и получить сумму также разделенную этим знаком, что вышеупомянутый код и делает.
Но по-любому, спасибо.
Страницы: 1
Наверх