Всем здравствуйте. Вопрос в следующем, что б написать формулу, получается много раз писать ЕСЛИ, это очень неудобно и возможно что-либо напутать. как можно упростить её , при том что переменных может более чем три как в примере. Красным цветом указаны переменные.
Всем здравствуйте. Вопрос в следующем, что б написать формулу, получается много раз писать ЕСЛИ, это очень неудобно и возможно что-либо напутать. как можно упростить её , при том что переменных может более чем три как в примере. Красным цветом указаны переменные.astashov_michail@tutby
Nic70y, Отлично. Спасибо. А как визуализировать , чтоб после ответы в соседнем столбце было расписано типа - А=70+(-45)+325=350 esΔ=0+(-0,15*(-1))+0,4=0,55
Nic70y, Отлично. Спасибо. А как визуализировать , чтоб после ответы в соседнем столбце было расписано типа - А=70+(-45)+325=350 esΔ=0+(-0,15*(-1))+0,4=0,55astashov_michail@tutby
Не могу Вам точно сказать. После того как установили 2019 LTSC половина формул из башки повылетало, как говорится забыл даже то, чего не знал. Скорее всего можно, но это нужно ждать формулистов, как вариант макрос, можно написать пользовательскую функцию (UDF)
Не могу Вам точно сказать. После того как установили 2019 LTSC половина формул из башки повылетало, как говорится забыл даже то, чего не знал. Скорее всего можно, но это нужно ждать формулистов, как вариант макрос, можно написать пользовательскую функцию (UDF)msi2102
Sub u_416() Application.ScreenUpdating = False For Each a In Range("a7:a9") b = InStr("À0esei", Left(a, 2)) d = "" For c = 1 To 5 Step 2 If b = 1 Then e = Range("b" & c).Value If e = "+" Then f = "" g = "" Else f = "(" g = "*-1)" End If x = "+" If d = "" Then x = "" d = d & x & f & Range("c" & c) & g a.Offset(0, 1) = "=" & d a.Offset(0, 2) = a & "=" & d ElseIf b = 3 Then e = Range("b" & c).Value If e = "+" Then u = Range("d" & c).Value Else u = "(" & Range("d" & c + 1).Value & "*-1)" End If x = "+" If d = "" Then x = "" d = d & x & u a.Offset(0, 1) = "=" & Replace(d, ",", ".") a.Offset(0, 2) = a & "=" & d ElseIf b = 5 Then e = Range("b" & c).Value If e = "+" Then u = Range("d" & c + 1).Value Else u = "(" & Range("d" & c).Value & "*-1)" End If x = "+" If d = "" Then x = "" d = d & x & u a.Offset(0, 1) = "=" & Replace(d, ",", ".") a.Offset(0, 2) = a & "=" & d End If Next Next Application.ScreenUpdating = True End Sub
[/vba]
[vba]
Код
Sub u_416() Application.ScreenUpdating = False For Each a In Range("a7:a9") b = InStr("À0esei", Left(a, 2)) d = "" For c = 1 To 5 Step 2 If b = 1 Then e = Range("b" & c).Value If e = "+" Then f = "" g = "" Else f = "(" g = "*-1)" End If x = "+" If d = "" Then x = "" d = d & x & f & Range("c" & c) & g a.Offset(0, 1) = "=" & d a.Offset(0, 2) = a & "=" & d ElseIf b = 3 Then e = Range("b" & c).Value If e = "+" Then u = Range("d" & c).Value Else u = "(" & Range("d" & c + 1).Value & "*-1)" End If x = "+" If d = "" Then x = "" d = d & x & u a.Offset(0, 1) = "=" & Replace(d, ",", ".") a.Offset(0, 2) = a & "=" & d ElseIf b = 5 Then e = Range("b" & c).Value If e = "+" Then u = Range("d" & c + 1).Value Else u = "(" & Range("d" & c).Value & "*-1)" End If x = "+" If d = "" Then x = "" d = d & x & u a.Offset(0, 1) = "=" & Replace(d, ",", ".") a.Offset(0, 2) = a & "=" & d End If Next Next Application.ScreenUpdating = True End Sub
Public Function Сумма_А(ByRef znak As Range, znach As Range, Optional v As Byte) Dim n As Integer, c As Double, i As Double On Error GoTo ErrHand arr1 = znak.Value arr2 = znach.Value For n = LBound(arr1) To UBound(arr1) Step 2 If arr1(n, 1) <> "-" Then arr1(n, 1) = "+" Select Case v Case Is = 0, 1: k = 0 Case Is = 2: k = 1 End Select i = 1 Else Select Case v Case Is = 0, 2: k = 0 Case Is = 1: k = 1 End Select i = -1 End If If arr2(n + k, 1) <> "" And arr2(n + k, 1) <> 0 Then m = m & "+" & arr2(n + k, 1) * i: c = c + arr2(n + k, 1) * i Next n Select Case v Case Is = 0: s = "A" Case Is = 1: s = "es" & ChrW(916) Case Is = 2: s = "ei" & ChrW(916) End Select Сумма_А = Replace(s & "=" & Mid(m, 2) & "=" & c, "+-", "-") Exit Function ErrHand: Сумма_А = "Ошибка" End Function
[/vba]
Код
=Сумма_А("Диапазон_знаков";"Диапазон_значений";"0 или ""-сумма А, 1-сумма es, 1-сумма ei")
Ну тогда UDF
[vba]
Код
Public Function Сумма_А(ByRef znak As Range, znach As Range, Optional v As Byte) Dim n As Integer, c As Double, i As Double On Error GoTo ErrHand arr1 = znak.Value arr2 = znach.Value For n = LBound(arr1) To UBound(arr1) Step 2 If arr1(n, 1) <> "-" Then arr1(n, 1) = "+" Select Case v Case Is = 0, 1: k = 0 Case Is = 2: k = 1 End Select i = 1 Else Select Case v Case Is = 0, 2: k = 0 Case Is = 1: k = 1 End Select i = -1 End If If arr2(n + k, 1) <> "" And arr2(n + k, 1) <> 0 Then m = m & "+" & arr2(n + k, 1) * i: c = c + arr2(n + k, 1) * i Next n Select Case v Case Is = 0: s = "A" Case Is = 1: s = "es" & ChrW(916) Case Is = 2: s = "ei" & ChrW(916) End Select Сумма_А = Replace(s & "=" & Mid(m, 2) & "=" & c, "+-", "-") Exit Function ErrHand: Сумма_А = "Ошибка" End Function
[/vba]
Код
=Сумма_А("Диапазон_знаков";"Диапазон_значений";"0 или ""-сумма А, 1-сумма es, 1-сумма ei")
msi2102, огромное СПАСИБО, за проделанную Вами работу, но к моему стыду, по мимо того что у меня эксель 2016, так ещё и макросами не дружу :(. и по этому если изменятся немного условия в переменных я наверное не разберусь в VBA. Буду пробовать как-нибудь по старинки пробовать формулами справится. ещё раз спасибо
msi2102, огромное СПАСИБО, за проделанную Вами работу, но к моему стыду, по мимо того что у меня эксель 2016, так ещё и макросами не дружу :(. и по этому если изменятся немного условия в переменных я наверное не разберусь в VBA. Буду пробовать как-нибудь по старинки пробовать формулами справится. ещё раз спасибоastashov_michail@tutby
Так в чем проблема, подружитесь, там не так сложно как Вам кажется, по крайней мере, для того, чтобы скопировать код макроса в стандартный модуль, нужно нажать три кнопки. Почитайте ТУТ или ТУТ
и по этому если изменятся немного условия в переменных я наверное не разберусь в VBA
Последняя функция из сообщения №14, частично решает эту проблему. например если будет не три строки, а 5 или 6 ей без разницы, она их обработает, главное, чтобы формат таблицы сохранялся
Так в чем проблема, подружитесь, там не так сложно как Вам кажется, по крайней мере, для того, чтобы скопировать код макроса в стандартный модуль, нужно нажать три кнопки. Почитайте ТУТ или ТУТ
и по этому если изменятся немного условия в переменных я наверное не разберусь в VBA
Последняя функция из сообщения №14, частично решает эту проблему. например если будет не три строки, а 5 или 6 ей без разницы, она их обработает, главное, чтобы формат таблицы сохранялсяmsi2102
msi2102, СЦЕП(ЕСЛИ(ОСТАТ(СТРОКА(B2:B7);2)=0;ЕСЛИ(E2:E7<>0;"+"&E2:E7;"");"")) пишет #ИМЯ? и если изменяю значение переменной, то тоже пишет #ИМЯ?
msi2102, СЦЕП(ЕСЛИ(ОСТАТ(СТРОКА(B2:B7);2)=0;ЕСЛИ(E2:E7<>0;"+"&E2:E7;"");"")) пишет #ИМЯ? и если изменяю значение переменной, то тоже пишет #ИМЯ?astashov_michail@tutby
astashovM..
Сообщение отредактировал astashov_michail@tutby - Пятница, 12.08.2022, 16:23