Вычислить сумму с учётом указанного знака слагаемого
astashov_michail@tutby
Дата: Среда, 10.08.2022, 15:38 |
Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 94
Всем здравствуйте. Вопрос в следующем, что б написать формулу, получается много раз писать ЕСЛИ, это очень неудобно и возможно что-либо напутать. как можно упростить её , при том что переменных может более чем три как в примере. Красным цветом указаны переменные.
Всем здравствуйте. Вопрос в следующем, что б написать формулу, получается много раз писать ЕСЛИ, это очень неудобно и возможно что-либо напутать. как можно упростить её , при том что переменных может более чем три как в примере. Красным цветом указаны переменные. astashov_michail@tutby
astashovM..
Ответить
Сообщение Всем здравствуйте. Вопрос в следующем, что б написать формулу, получается много раз писать ЕСЛИ, это очень неудобно и возможно что-либо напутать. как можно упростить её , при том что переменных может более чем три как в примере. Красным цветом указаны переменные. Автор - astashov_michail@tutby Дата добавления - 10.08.2022 в 15:38
Nic70y
Дата: Среда, 10.08.2022, 16:40 |
Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 9133
Репутация:
2416
±
Замечаний:
0% ±
Excel 2010
esΔ=0+(-0,15*(-1))+0,3 =0,45 почему 0,3?
esΔ=0+(-0,15*(-1))+0,3 =0,45 почему 0,3? Nic70y
ЮMoney 41001841029809
Ответить
Сообщение esΔ=0+(-0,15*(-1))+0,3 =0,45 почему 0,3? Автор - Nic70y Дата добавления - 10.08.2022 в 16:40
astashov_michail@tutby
Дата: Среда, 10.08.2022, 16:54 |
Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 94
Nic70y, да, прошу прощения - 0,4, забыл изменить :(. Прикрепил изменённый файл
astashovM..
Ответить
Сообщение Nic70y, да, прошу прощения - 0,4, забыл изменить :(. Прикрепил изменённый файл Автор - astashov_michail@tutby Дата добавления - 10.08.2022 в 16:54
Nic70y
Дата: Среда, 10.08.2022, 16:57 |
Сообщение № 4
Группа: Друзья
Ранг: Экселист
Сообщений: 9133
Репутация:
2416
±
Замечаний:
0% ±
Excel 2010
=СУММЕСЛИ()
ЮMoney 41001841029809
Сообщение отредактировал Nic70y - Среда, 10.08.2022, 17:01
Ответить
Сообщение
=СУММЕСЛИ()
Автор - Nic70y Дата добавления - 10.08.2022 в 16:57
msi2102
Дата: Среда, 10.08.2022, 17:08 |
Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 430
Репутация:
131
±
Замечаний:
0% ±
Excel 2019
Если есть функция "ПОСЛЕД", то можно ещё так А:
=СУММ(ИНДЕКС(B1:B6 ="+";ПОСЛЕД(3;1;1;2))*ИНДЕКС(C1:C6 ;ПОСЛЕД(3;1;1;2)))-СУММ(ИНДЕКС(B1:B6 ="-";ПОСЛЕД(3;1;1;2))*ИНДЕКС(C1:C6 ;ПОСЛЕД(3;1;1;2)))
esΔ
=СУММ(-ИНДЕКС(B1:B6 ="-";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;2;2)))+СУММ(ИНДЕКС(B1:B6 ="+";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;1;2)))
eiΔ
=СУММ(ИНДЕКС(B1:B6 ="+";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;2;2)))+СУММ(-ИНДЕКС(B1:B6 ="-";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;1;2)))
Если есть функция "ПОСЛЕД", то можно ещё так А:
=СУММ(ИНДЕКС(B1:B6 ="+";ПОСЛЕД(3;1;1;2))*ИНДЕКС(C1:C6 ;ПОСЛЕД(3;1;1;2)))-СУММ(ИНДЕКС(B1:B6 ="-";ПОСЛЕД(3;1;1;2))*ИНДЕКС(C1:C6 ;ПОСЛЕД(3;1;1;2)))
esΔ
=СУММ(-ИНДЕКС(B1:B6 ="-";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;2;2)))+СУММ(ИНДЕКС(B1:B6 ="+";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;1;2)))
eiΔ
=СУММ(ИНДЕКС(B1:B6 ="+";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;2;2)))+СУММ(-ИНДЕКС(B1:B6 ="-";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;1;2)))
msi2102
Сообщение отредактировал msi2102 - Среда, 10.08.2022, 17:10
Ответить
Сообщение Если есть функция "ПОСЛЕД", то можно ещё так А:
=СУММ(ИНДЕКС(B1:B6 ="+";ПОСЛЕД(3;1;1;2))*ИНДЕКС(C1:C6 ;ПОСЛЕД(3;1;1;2)))-СУММ(ИНДЕКС(B1:B6 ="-";ПОСЛЕД(3;1;1;2))*ИНДЕКС(C1:C6 ;ПОСЛЕД(3;1;1;2)))
esΔ
=СУММ(-ИНДЕКС(B1:B6 ="-";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;2;2)))+СУММ(ИНДЕКС(B1:B6 ="+";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;1;2)))
eiΔ
=СУММ(ИНДЕКС(B1:B6 ="+";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;2;2)))+СУММ(-ИНДЕКС(B1:B6 ="-";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;1;2)))
Автор - msi2102 Дата добавления - 10.08.2022 в 17:08
astashov_michail@tutby
Дата: Среда, 10.08.2022, 17:11 |
Сообщение № 6
Группа: Пользователи
Ранг: Участник
Сообщений: 94
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,55 astashov_michail@tutby
astashovM..
Ответить
Сообщение Nic70y, Отлично. Спасибо. А как визуализировать , чтоб после ответы в соседнем столбце было расписано типа - А=70+(-45)+325=350 esΔ=0+(-0,15*(-1))+0,4=0,55 Автор - astashov_michail@tutby Дата добавления - 10.08.2022 в 17:11
msi2102
Дата: Среда, 10.08.2022, 17:44 |
Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 430
Репутация:
131
±
Замечаний:
0% ±
Excel 2019
Ну теперь если есть "ПОСЛЕД" и "ОБЪЕДИНИТЬ" А:
="A="&ОБЪЕДИНИТЬ("";1;ОБЪЕДИНИТЬ("+";1;ЕСЛИ(ИНДЕКС(B1:B6 ="+";ПОСЛЕД(3;1;1;2))*ИНДЕКС(C1:C6 ;ПОСЛЕД(3;1;1;2))=0;"";ИНДЕКС(B1:B6 ="+";ПОСЛЕД(3;1;1;2))*ИНДЕКС(C1:C6 ;ПОСЛЕД(3;1;1;2))));ЕСЛИ(-ИНДЕКС(B1:B6 ="-";ПОСЛЕД(3;1;1;2))*ИНДЕКС(C1:C6 ;ПОСЛЕД(3;1;1;2))=0;"";-ИНДЕКС(B1:B6 ="-";ПОСЛЕД(3;1;1;2))*ИНДЕКС(C1:C6 ;ПОСЛЕД(3;1;1;2))))
esΔ:
="esΔ="&ОБЪЕДИНИТЬ("+";1;ЕСЛИ(-ИНДЕКС(B1:B6 ="-";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;2;2))=0;"";-ИНДЕКС(B1:B6 ="-";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;2;2)));ЕСЛИ(ИНДЕКС(B1:B6 ="+";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;1;2))=0;"";ИНДЕКС(B1:B6 ="+";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;1;2))))
eiΔ:
="eiΔ="&ОБЪЕДИНИТЬ("";1;ЕСЛИ(ИНДЕКС(B1:B6 ="+";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;2;2))=0;"";ИНДЕКС(B1:B6 ="+";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;2;2)));ЕСЛИ(-ИНДЕКС(B1:B6 ="-";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;1;2))=0;"";-ИНДЕКС(B1:B6 ="-";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;1;2))))
Ну теперь если есть "ПОСЛЕД" и "ОБЪЕДИНИТЬ" А:
="A="&ОБЪЕДИНИТЬ("";1;ОБЪЕДИНИТЬ("+";1;ЕСЛИ(ИНДЕКС(B1:B6 ="+";ПОСЛЕД(3;1;1;2))*ИНДЕКС(C1:C6 ;ПОСЛЕД(3;1;1;2))=0;"";ИНДЕКС(B1:B6 ="+";ПОСЛЕД(3;1;1;2))*ИНДЕКС(C1:C6 ;ПОСЛЕД(3;1;1;2))));ЕСЛИ(-ИНДЕКС(B1:B6 ="-";ПОСЛЕД(3;1;1;2))*ИНДЕКС(C1:C6 ;ПОСЛЕД(3;1;1;2))=0;"";-ИНДЕКС(B1:B6 ="-";ПОСЛЕД(3;1;1;2))*ИНДЕКС(C1:C6 ;ПОСЛЕД(3;1;1;2))))
esΔ:
="esΔ="&ОБЪЕДИНИТЬ("+";1;ЕСЛИ(-ИНДЕКС(B1:B6 ="-";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;2;2))=0;"";-ИНДЕКС(B1:B6 ="-";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;2;2)));ЕСЛИ(ИНДЕКС(B1:B6 ="+";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;1;2))=0;"";ИНДЕКС(B1:B6 ="+";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;1;2))))
eiΔ:
="eiΔ="&ОБЪЕДИНИТЬ("";1;ЕСЛИ(ИНДЕКС(B1:B6 ="+";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;2;2))=0;"";ИНДЕКС(B1:B6 ="+";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;2;2)));ЕСЛИ(-ИНДЕКС(B1:B6 ="-";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;1;2))=0;"";-ИНДЕКС(B1:B6 ="-";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;1;2))))
msi2102
Ответить
Сообщение Ну теперь если есть "ПОСЛЕД" и "ОБЪЕДИНИТЬ" А:
="A="&ОБЪЕДИНИТЬ("";1;ОБЪЕДИНИТЬ("+";1;ЕСЛИ(ИНДЕКС(B1:B6 ="+";ПОСЛЕД(3;1;1;2))*ИНДЕКС(C1:C6 ;ПОСЛЕД(3;1;1;2))=0;"";ИНДЕКС(B1:B6 ="+";ПОСЛЕД(3;1;1;2))*ИНДЕКС(C1:C6 ;ПОСЛЕД(3;1;1;2))));ЕСЛИ(-ИНДЕКС(B1:B6 ="-";ПОСЛЕД(3;1;1;2))*ИНДЕКС(C1:C6 ;ПОСЛЕД(3;1;1;2))=0;"";-ИНДЕКС(B1:B6 ="-";ПОСЛЕД(3;1;1;2))*ИНДЕКС(C1:C6 ;ПОСЛЕД(3;1;1;2))))
esΔ:
="esΔ="&ОБЪЕДИНИТЬ("+";1;ЕСЛИ(-ИНДЕКС(B1:B6 ="-";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;2;2))=0;"";-ИНДЕКС(B1:B6 ="-";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;2;2)));ЕСЛИ(ИНДЕКС(B1:B6 ="+";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;1;2))=0;"";ИНДЕКС(B1:B6 ="+";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;1;2))))
eiΔ:
="eiΔ="&ОБЪЕДИНИТЬ("";1;ЕСЛИ(ИНДЕКС(B1:B6 ="+";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;2;2))=0;"";ИНДЕКС(B1:B6 ="+";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;2;2)));ЕСЛИ(-ИНДЕКС(B1:B6 ="-";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;1;2))=0;"";-ИНДЕКС(B1:B6 ="-";ПОСЛЕД(3;1;1;2))*ИНДЕКС(D1:D6 ;ПОСЛЕД(3;1;1;2))))
Автор - msi2102 Дата добавления - 10.08.2022 в 17:44
astashov_michail@tutby
Дата: Среда, 10.08.2022, 18:03 |
Сообщение № 8
Группа: Пользователи
Ранг: Участник
Сообщений: 94
msi2102, я скачал файл ваш, открыл, попробовал изменить в таблице + на - и в формулах #ИМЯ?
msi2102, я скачал файл ваш, открыл, попробовал изменить в таблице + на - и в формулах #ИМЯ? astashov_michail@tutby
astashovM..
Ответить
Сообщение msi2102, я скачал файл ваш, открыл, попробовал изменить в таблице + на - и в формулах #ИМЯ? Автор - astashov_michail@tutby Дата добавления - 10.08.2022 в 18:03
msi2102
Дата: Среда, 10.08.2022, 18:15 |
Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 430
Репутация:
131
±
Замечаний:
0% ±
Excel 2019
Поэтому и писал: "если есть эти эти функции", если не ошибаюсь ОБЪЕДИНИТЬ появилась в 2019-ом, а ПОСЛЕД в 2021 или 365
Поэтому и писал: "если есть эти эти функции", если не ошибаюсь ОБЪЕДИНИТЬ появилась в 2019-ом, а ПОСЛЕД в 2021 или 365 msi2102
Ответить
Сообщение Поэтому и писал: "если есть эти эти функции", если не ошибаюсь ОБЪЕДИНИТЬ появилась в 2019-ом, а ПОСЛЕД в 2021 или 365 Автор - msi2102 Дата добавления - 10.08.2022 в 18:15
astashov_michail@tutby
Дата: Среда, 10.08.2022, 18:42 |
Сообщение № 10
Группа: Пользователи
Ранг: Участник
Сообщений: 94
msi2102, у меня 2016
astashovM..
Ответить
astashov_michail@tutby
Дата: Среда, 10.08.2022, 22:00 |
Сообщение № 11
Группа: Пользователи
Ранг: Участник
Сообщений: 94
msi2102, я так понял что в 2016 это реализовать никак, да?
astashovM..
Ответить
Сообщение msi2102, я так понял что в 2016 это реализовать никак, да? Автор - astashov_michail@tutby Дата добавления - 10.08.2022 в 22:00
msi2102
Дата: Четверг, 11.08.2022, 08:36 |
Сообщение № 12
Группа: Проверенные
Ранг: Обитатель
Сообщений: 430
Репутация:
131
±
Замечаний:
0% ±
Excel 2019
в 2016 это реализовать никак
Не могу Вам точно сказать. После того как установили 2019 LTSC половина формул из башки повылетало, как говорится забыл даже то, чего не знал. Скорее всего можно, но это нужно ждать формулистов, как вариант макрос, можно написать пользовательскую функцию (UDF)
в 2016 это реализовать никак
Не могу Вам точно сказать. После того как установили 2019 LTSC половина формул из башки повылетало, как говорится забыл даже то, чего не знал. Скорее всего можно, но это нужно ждать формулистов, как вариант макрос, можно написать пользовательскую функцию (UDF)msi2102
Ответить
Сообщение в 2016 это реализовать никак
Не могу Вам точно сказать. После того как установили 2019 LTSC половина формул из башки повылетало, как говорится забыл даже то, чего не знал. Скорее всего можно, но это нужно ждать формулистов, как вариант макрос, можно написать пользовательскую функцию (UDF)Автор - msi2102 Дата добавления - 11.08.2022 в 08:36
Nic70y
Дата: Четверг, 11.08.2022, 09:03 |
Сообщение № 13
Группа: Друзья
Ранг: Экселист
Сообщений: 9133
Репутация:
2416
±
Замечаний:
0% ±
Excel 2010
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
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
Nic70y
ЮMoney 41001841029809
Ответить
Сообщение [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 = ТrueEnd Sub
[/vba] Автор - Nic70y Дата добавления - 11.08.2022 в 09:03
msi2102
Дата: Четверг, 11.08.2022, 12:43 |
Сообщение № 14
Группа: Проверенные
Ранг: Обитатель
Сообщений: 430
Репутация:
131
±
Замечаний:
0% ±
Excel 2019
Ну тогда UDF
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
=Сумма_А("Диапазон_знаков";"Диапазон_значений";"0 или ""-сумма А, 1-сумма es, 1-сумма ei")
Ну тогда UDF
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
=Сумма_А("Диапазон_знаков";"Диапазон_значений";"0 или ""-сумма А, 1-сумма es, 1-сумма ei")
msi2102
Сообщение отредактировал msi2102 - Четверг, 11.08.2022, 12:44
Ответить
Сообщение Ну тогда UDF [vba]
Public Function Сумма_А(ByRef znak As Range , znach As Range , Optional v As Byte )Dim n As Integer , c As Double , i As DoubleOn Error GoTo ErrHandarr1 = znak.Valuearr2 = znach.ValueFor 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) * iNext nSelect 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 FunctionErrHand :Сумма_А = "Ошибка"End Function
[/vba]
=Сумма_А("Диапазон_знаков";"Диапазон_значений";"0 или ""-сумма А, 1-сумма es, 1-сумма ei")
Автор - msi2102 Дата добавления - 11.08.2022 в 12:43
astashov_michail@tutby
Дата: Четверг, 11.08.2022, 21:31 |
Сообщение № 15
Группа: Пользователи
Ранг: Участник
Сообщений: 94
msi2102, огромное СПАСИБО, за проделанную Вами работу, но к моему стыду, по мимо того что у меня эксель 2016, так ещё и макросами не дружу :(. и по этому если изменятся немного условия в переменных я наверное не разберусь в VBA. Буду пробовать как-нибудь по старинки пробовать формулами справится. ещё раз спасибо
msi2102, огромное СПАСИБО, за проделанную Вами работу, но к моему стыду, по мимо того что у меня эксель 2016, так ещё и макросами не дружу :(. и по этому если изменятся немного условия в переменных я наверное не разберусь в VBA. Буду пробовать как-нибудь по старинки пробовать формулами справится. ещё раз спасибо astashov_michail@tutby
astashovM..
Ответить
Сообщение msi2102, огромное СПАСИБО, за проделанную Вами работу, но к моему стыду, по мимо того что у меня эксель 2016, так ещё и макросами не дружу :(. и по этому если изменятся немного условия в переменных я наверное не разберусь в VBA. Буду пробовать как-нибудь по старинки пробовать формулами справится. ещё раз спасибо Автор - astashov_michail@tutby Дата добавления - 11.08.2022 в 21:31
msi2102
Дата: Пятница, 12.08.2022, 08:36 |
Сообщение № 16
Группа: Проверенные
Ранг: Обитатель
Сообщений: 430
Репутация:
131
±
Замечаний:
0% ±
Excel 2019
так ещё и макросами не дружу :(
Так в чем проблема, подружитесь, там не так сложно как Вам кажется, по крайней мере, для того, чтобы скопировать код макроса в стандартный модуль, нужно нажать три кнопки. Почитайте ТУТ или ТУТ и по этому если изменятся немного условия в переменных я наверное не разберусь в VBA
Последняя функция из сообщения №14, частично решает эту проблему. например если будет не три строки, а 5 или 6 ей без разницы, она их обработает, главное, чтобы формат таблицы сохранялся
так ещё и макросами не дружу :(
Так в чем проблема, подружитесь, там не так сложно как Вам кажется, по крайней мере, для того, чтобы скопировать код макроса в стандартный модуль, нужно нажать три кнопки. Почитайте ТУТ или ТУТ и по этому если изменятся немного условия в переменных я наверное не разберусь в VBA
Последняя функция из сообщения №14, частично решает эту проблему. например если будет не три строки, а 5 или 6 ей без разницы, она их обработает, главное, чтобы формат таблицы сохранялсяmsi2102
Ответить
Сообщение так ещё и макросами не дружу :(
Так в чем проблема, подружитесь, там не так сложно как Вам кажется, по крайней мере, для того, чтобы скопировать код макроса в стандартный модуль, нужно нажать три кнопки. Почитайте ТУТ или ТУТ и по этому если изменятся немного условия в переменных я наверное не разберусь в VBA
Последняя функция из сообщения №14, частично решает эту проблему. например если будет не три строки, а 5 или 6 ей без разницы, она их обработает, главное, чтобы формат таблицы сохранялсяАвтор - msi2102 Дата добавления - 12.08.2022 в 08:36
Nic70y
Дата: Пятница, 12.08.2022, 08:55 |
Сообщение № 17
Группа: Друзья
Ранг: Экселист
Сообщений: 9133
Репутация:
2416
±
Замечаний:
0% ±
Excel 2010
апдэйт не, че-то не допилил, может потом. теперь вроде норм.
апдэйт не, че-то не допилил, может потом. теперь вроде норм.Nic70y
ЮMoney 41001841029809
Сообщение отредактировал Nic70y - Пятница, 12.08.2022, 11:05
Ответить
Сообщение апдэйт не, че-то не допилил, может потом. теперь вроде норм.Автор - Nic70y Дата добавления - 12.08.2022 в 08:55
msi2102
Дата: Пятница, 12.08.2022, 11:04 |
Сообщение № 18
Группа: Проверенные
Ранг: Обитатель
Сообщений: 430
Репутация:
131
±
Замечаний:
0% ±
Excel 2019
как-нибудь по старинки пробовать формулами
Если есть функция "=СЦЕП()" (по моему она появилась как раз 2016), с доп столбцом (наверное возможно и без него, но лень думать) Доп.столбец: E2:
=ЕСЛИ(B2 ="+";D2 ;-D3 )
E3:
=ЕСЛИ(B2 ="+";D3 ;-D2 )
Выделить обе ячейки и протянуть вниз. A:
="A="&ЕСЛИ(B2 ="-";"-";"")&ПСТР(ПОДСТАВИТЬ(СЦЕП(ЕСЛИ(ОСТАТ(СТРОКА(B2:B7 );2)=0;"+"&(C2:C7 *(B2:B7 &1));""));"+-";"-");2;999)
esΔ:
="esΔ="&ЕСЛИ(ЛЕВСИМВ(ПОДСТАВИТЬ(СЦЕП(ЕСЛИ(ОСТАТ(СТРОКА(B2:B7 );2)=0;ЕСЛИ(E2:E7 <>0;"+"&E2:E7 ;"");""));"+-";"-");1)="+";ПСТР(ПОДСТАВИТЬ(СЦЕП(ЕСЛИ(ОСТАТ(СТРОКА(B2:B7 );2)=0;ЕСЛИ(E2:E7 <>0;"+"&E2:E7 ;"");""));"+-";"-");2;999);ПОДСТАВИТЬ(СЦЕП(ЕСЛИ(ОСТАТ(СТРОКА(B2:B7 );2)=0;ЕСЛИ(E2:E7 <>0;"+"&E2:E7 ;"");""));"+-";"-"))
eiΔ:
="eiΔ="&ЕСЛИ(ЛЕВСИМВ(ПОДСТАВИТЬ(СЦЕП(ЕСЛИ(ОСТАТ(СТРОКА(B2:B7 );2)=1;ЕСЛИ(E2:E7 <>0;"+"&E2:E7 ;"");""));"+-";"-");1)="+";ПСТР(ПОДСТАВИТЬ(СЦЕП(ЕСЛИ(ОСТАТ(СТРОКА(B2:B7 );2)=1;ЕСЛИ(E2:E7 <>0;"+"&E2:E7 ;"");""));"+-";"-");2;999);ПОДСТАВИТЬ(СЦЕП(ЕСЛИ(ОСТАТ(СТРОКА(B2:B7 );2)=1;ЕСЛИ(E2:E7 <>0;"+"&E2:E7 ;"");""));"+-";"-"))
Если не будет смущать "+" в начале, то можно короче
="esΔ="&ПОДСТАВИТЬ(СЦЕП(ЕСЛИ(ОСТАТ(СТРОКА(B2:B7 );2)=0;ЕСЛИ(E2:E7 <>0;"+"&E2:E7 ;"");""));"+-";"-")
="eiΔ="&ПОДСТАВИТЬ(СЦЕП(ЕСЛИ(ОСТАТ(СТРОКА(B2:B7 );2)=1;ЕСЛИ(E2:E7 <>0;"+"&E2:E7 ;"");""));"+-";"-")
как-нибудь по старинки пробовать формулами
Если есть функция "=СЦЕП()" (по моему она появилась как раз 2016), с доп столбцом (наверное возможно и без него, но лень думать) Доп.столбец: E2:
=ЕСЛИ(B2 ="+";D2 ;-D3 )
E3:
=ЕСЛИ(B2 ="+";D3 ;-D2 )
Выделить обе ячейки и протянуть вниз. A:
="A="&ЕСЛИ(B2 ="-";"-";"")&ПСТР(ПОДСТАВИТЬ(СЦЕП(ЕСЛИ(ОСТАТ(СТРОКА(B2:B7 );2)=0;"+"&(C2:C7 *(B2:B7 &1));""));"+-";"-");2;999)
esΔ:
="esΔ="&ЕСЛИ(ЛЕВСИМВ(ПОДСТАВИТЬ(СЦЕП(ЕСЛИ(ОСТАТ(СТРОКА(B2:B7 );2)=0;ЕСЛИ(E2:E7 <>0;"+"&E2:E7 ;"");""));"+-";"-");1)="+";ПСТР(ПОДСТАВИТЬ(СЦЕП(ЕСЛИ(ОСТАТ(СТРОКА(B2:B7 );2)=0;ЕСЛИ(E2:E7 <>0;"+"&E2:E7 ;"");""));"+-";"-");2;999);ПОДСТАВИТЬ(СЦЕП(ЕСЛИ(ОСТАТ(СТРОКА(B2:B7 );2)=0;ЕСЛИ(E2:E7 <>0;"+"&E2:E7 ;"");""));"+-";"-"))
eiΔ:
="eiΔ="&ЕСЛИ(ЛЕВСИМВ(ПОДСТАВИТЬ(СЦЕП(ЕСЛИ(ОСТАТ(СТРОКА(B2:B7 );2)=1;ЕСЛИ(E2:E7 <>0;"+"&E2:E7 ;"");""));"+-";"-");1)="+";ПСТР(ПОДСТАВИТЬ(СЦЕП(ЕСЛИ(ОСТАТ(СТРОКА(B2:B7 );2)=1;ЕСЛИ(E2:E7 <>0;"+"&E2:E7 ;"");""));"+-";"-");2;999);ПОДСТАВИТЬ(СЦЕП(ЕСЛИ(ОСТАТ(СТРОКА(B2:B7 );2)=1;ЕСЛИ(E2:E7 <>0;"+"&E2:E7 ;"");""));"+-";"-"))
Если не будет смущать "+" в начале, то можно короче
="esΔ="&ПОДСТАВИТЬ(СЦЕП(ЕСЛИ(ОСТАТ(СТРОКА(B2:B7 );2)=0;ЕСЛИ(E2:E7 <>0;"+"&E2:E7 ;"");""));"+-";"-")
="eiΔ="&ПОДСТАВИТЬ(СЦЕП(ЕСЛИ(ОСТАТ(СТРОКА(B2:B7 );2)=1;ЕСЛИ(E2:E7 <>0;"+"&E2:E7 ;"");""));"+-";"-")
msi2102
Сообщение отредактировал msi2102 - Пятница, 12.08.2022, 12:08
Ответить
Сообщение как-нибудь по старинки пробовать формулами
Если есть функция "=СЦЕП()" (по моему она появилась как раз 2016), с доп столбцом (наверное возможно и без него, но лень думать) Доп.столбец: E2:
=ЕСЛИ(B2 ="+";D2 ;-D3 )
E3:
=ЕСЛИ(B2 ="+";D3 ;-D2 )
Выделить обе ячейки и протянуть вниз. A:
="A="&ЕСЛИ(B2 ="-";"-";"")&ПСТР(ПОДСТАВИТЬ(СЦЕП(ЕСЛИ(ОСТАТ(СТРОКА(B2:B7 );2)=0;"+"&(C2:C7 *(B2:B7 &1));""));"+-";"-");2;999)
esΔ:
="esΔ="&ЕСЛИ(ЛЕВСИМВ(ПОДСТАВИТЬ(СЦЕП(ЕСЛИ(ОСТАТ(СТРОКА(B2:B7 );2)=0;ЕСЛИ(E2:E7 <>0;"+"&E2:E7 ;"");""));"+-";"-");1)="+";ПСТР(ПОДСТАВИТЬ(СЦЕП(ЕСЛИ(ОСТАТ(СТРОКА(B2:B7 );2)=0;ЕСЛИ(E2:E7 <>0;"+"&E2:E7 ;"");""));"+-";"-");2;999);ПОДСТАВИТЬ(СЦЕП(ЕСЛИ(ОСТАТ(СТРОКА(B2:B7 );2)=0;ЕСЛИ(E2:E7 <>0;"+"&E2:E7 ;"");""));"+-";"-"))
eiΔ:
="eiΔ="&ЕСЛИ(ЛЕВСИМВ(ПОДСТАВИТЬ(СЦЕП(ЕСЛИ(ОСТАТ(СТРОКА(B2:B7 );2)=1;ЕСЛИ(E2:E7 <>0;"+"&E2:E7 ;"");""));"+-";"-");1)="+";ПСТР(ПОДСТАВИТЬ(СЦЕП(ЕСЛИ(ОСТАТ(СТРОКА(B2:B7 );2)=1;ЕСЛИ(E2:E7 <>0;"+"&E2:E7 ;"");""));"+-";"-");2;999);ПОДСТАВИТЬ(СЦЕП(ЕСЛИ(ОСТАТ(СТРОКА(B2:B7 );2)=1;ЕСЛИ(E2:E7 <>0;"+"&E2:E7 ;"");""));"+-";"-"))
Если не будет смущать "+" в начале, то можно короче
="esΔ="&ПОДСТАВИТЬ(СЦЕП(ЕСЛИ(ОСТАТ(СТРОКА(B2:B7 );2)=0;ЕСЛИ(E2:E7 <>0;"+"&E2:E7 ;"");""));"+-";"-")
="eiΔ="&ПОДСТАВИТЬ(СЦЕП(ЕСЛИ(ОСТАТ(СТРОКА(B2:B7 );2)=1;ЕСЛИ(E2:E7 <>0;"+"&E2:E7 ;"");""));"+-";"-")
Автор - msi2102 Дата добавления - 12.08.2022 в 11:04
astashov_michail@tutby
Дата: Пятница, 12.08.2022, 16:00 |
Сообщение № 19
Группа: Пользователи
Ранг: Участник
Сообщений: 94
msi2102, Всем большое спасибо за помощь
astashovM..
Ответить
Сообщение msi2102, Всем большое спасибо за помощь Автор - astashov_michail@tutby Дата добавления - 12.08.2022 в 16:00
astashov_michail@tutby
Дата: Пятница, 12.08.2022, 16:20 |
Сообщение № 20
Группа: Пользователи
Ранг: Участник
Сообщений: 94
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
Ответить
Сообщение msi2102, СЦЕП(ЕСЛИ(ОСТАТ(СТРОКА(B2:B7);2)=0;ЕСЛИ(E2:E7<>0;"+"&E2:E7;"");"")) пишет #ИМЯ? и если изменяю значение переменной, то тоже пишет #ИМЯ? Автор - astashov_michail@tutby Дата добавления - 12.08.2022 в 16:20