Страницы: 1
RSS
Сумма элементов строки (столбца) матрицы с помощью формул и пользовательской функции
 
Уважаемые Гуру!  
Есть матрица, есть ячейка с указанием строки или столбца, в котором(ых) нужно найти сумму элементов.  
Прошу помочь найти стандартные формулы и написать пользовательскую функцию для выполнения этой операции.  
Файл прилагаю.
 
=СУММ(ИНДЕКС(D6:H13;B1;0))
 
Function SumRow(arr As Range, nRow As Long) As Double  
SumRow = Application.Sum(Application.Index(arr, nRow, 0))  
End Function  
 
использовать:  
=SumRow(D6:H13;B1)
 
Или так  
 
Function SumRow(arr As Range, nRow As Long) As Double  
SumRow = Application.Sum(arr.rows(nRow))  
End Function
 
Function SumRow2(arr As Range, nRow As Long) As Double  
Dim a As Variant, s As Double, i As Long  
a = arr.Value  
For i = 1 To UBound(a, 2)  
   s = s + a(nRow, i)  
Next i  
SumRow2 = s  
End Function
 
{quote}{login=Казанский}{date=02.01.2012 02:24}{thema=}{post}Или так  
 
Function SumRow(arr As Range, nRow As Long) As Double  
SumRow = Application.Sum(arr.rows(nRow))  
End Function{/post}{/quote}  
чего только не узнаешь :)  
 
Function SumRow3(arr As Range, nRow As Long) As Double  
Dim a As Variant, s As Double  
For Each a In arr.Rows(nRow).Value  
   s = s + a  
Next a  
SumRow3 = s  
End Function
 
> чего только не узнаешь :)  
 
1. Промежуточная переменная не нужна  
2. Чтобы работало как Application.Sum, неплохо бы проверять на число:  
 
Function SumRow3(arr As Range, nRow As Long) As Double  
Dim a As Variant  
For Each a In arr.Rows(nRow).Value  
if isnumeric(a) then SumRow3 = SumRow3 + a  
Next a  
End Function
 
Всем огромное спасибо!  
А есть ли матричные функции, выполняющие то же действо?  
 
P.S. Очень приятно получать уведомления об ответах в теме!
 
{quote}{login=okshef}{date=02.01.2012 05:27}{thema=}{post}  
P.S. Очень приятно получать уведомления об ответах в теме!{/post}{/quote}  
 
Какие уведомления вы получаете? На почту? )
 
Да, причем при каждом ответе. Очень радует!
 
хм, а мне ничего не приходит (( Видно потому, что я не создаю темы, а лишь отвечаю на них и пишу от незарегистрированного ника
 
{quote}{login=}{date=02.01.2012 06:33}{thema=}{post}хм, а мне ничего не приходит (( Видно потому, что я не создаю темы, а лишь отвечаю на них и пишу от незарегистрированного ника{/post}{/quote}Было бы прикольно получать уведомления на почту, не указав свою почту :-)
 
Кстати, два ваших ответа остались без уведомительных писем...  
Жаль, что движок форума...  
Эх, ладно, не будем офтопить, тем более об этом говОрено-переговОрено.
 
Проверил работу пользовательских функций при значении номера строки, выходящей за пределы диапазона. Если указано число, большее, чем число строк в массиве, функции  
SumRow = Application.Sum(Application.Index(arr, nRow, 0))  
 
и SubRow3 выдают 0 вместо ошибки
 
{quote}{login=Юрий М}{date=02.01.2012 06:40}{thema=Re: }{post}Было бы прикольно получать уведомления на почту, не указав свою почту :-){/post}{/quote}  
 
)) Вот что значит "несовершенный движок форума" ))  
 
 
Павел )
Страницы: 1
Читают тему
Наверх