Sub SquareMatrix()
Dim nCurrRowSumm As Long 'Сумма в текущей строке
Dim nTotalRowsSumm As Long 'Сумма во всех строках
Dim oRngWork As Range 'Переменная для диапазона, с которым будем работать
Dim oRow As Range 'Переменная для перебора строк в диапазоне
Dim oCell As Range 'Переменная для перебора ячеек в строке
'Если в выбранном диапазоне меньше четырех ячеек (минимальный размер квадратной матрицы) или количество строк _
не равно количеству столбцов (матрица не квадратная)
If Selection.Cells.Count < 4 Or Selection.Rows.Count <> Selection.Columns.Count Then Exit Sub
Set oRngWork = Selection.Cells(1).Resize(Selection.Rows.Count, Selection.Columns.Count)
For Each oRow In oRngWork.Rows
nCurrRowSumm = 0
For Each oCell In oRow.Cells
If oCell.Value >= 0 Then
nCurrRowSumm = nCurrRowSumm + CInt(oCell.Value)
Else
nCurrRowSumm = 0
Exit For
End If
Next oCell
nTotalRowsSumm = nTotalRowsSumm + nCurrRowSumm
Next oRow
Dim i As Long 'Счетчик строк
Dim j As Long 'Счетчик столбцов над или под диагональю
Dim k As Long 'Счетчик столбцов
Dim nMinDiagSumm As Long 'Минимальная сумма диагоналей
Dim nDiagSum As Long 'Сумма элементов текущей диагонали
'Минимальная сумма элементов диагоналей, параллельных главной и _
расположенных над ней
k = 2
Do While k < oRngWork.Rows.Count
nDiagSum = 0
i = 1
j = k
Do While i < oRngWork.Rows.Count - k + 2
'oRngWork.Cells(i, j).Interior.Color = RGB(0, 255, 0)
nDiagSum = nDiagSum + oRngWork.Cells(i, j).Value
'oRngWork.Cells(i, j).Interior.Color = 16777215
i = i + 1: j = j + 1
Loop
If nDiagSum < nMinDiagSumm And nMinDiagSumm <> 0 Then
nMinDiagSumm = nDiagSum
ElseIf nMinDiagSumm = 0 Then
nMinDiagSumm = nDiagSum
End If
k = k + 1
Loop
'Минимальная сумма элементов диагоналей, параллельных главной и _
расположенных под ней
k = oRngWork.Rows.Count - 1
Do While k > 1
i = oRngWork.Rows.Count
j = k
Do While i > oRngWork.Rows.Count - k
'oRngWork.Cells(i, j).Interior.Color = RGB(0, 255, 0)
nDiagSum = nDiagSum + oRngWork.Cells(i, j).Value
'oRngWork.Cells(i, j).Interior.Color = 16777215
i = i - 1: j = j - 1
Loop
If nDiagSum < nMinDiagSumm And nMinDiagSumm <> 0 Then
nMinDiagSumm = nDiagSum
ElseIf nMinDiagSumm = 0 Then
nMinDiagSumm = nDiagSum
End If
k = k - 1
Loop
MsgBox "Сумма элементов матрицы, в строках которых нет отрицательных элементов равна " & nTotalRowsSumm & vbCr & vbCr & _
"Минимум сумм элементов диагоналей, параллельных главной равен " & nMinDiagSumm, vbInformation + vbOKOnly, "Матрица " & oRngWork.Rows.Count & "x" & oRngWork.Columns.Count & " элементов"
End Sub
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.