VBA Excel Макросы: Определить количество "особых" элементов

Автор nightofpromises, 09 сентября 2017, 13:47

nightofpromises

Дана матрица размером mxn. Определить количество "особых" элементов. Элемент считать "особым", если он больше суммы своего столбца. Реализовать в отдельной подпрограмме заливку строк диапазона содержащих "особый" элемент.
Помогите мне, пожалуйста. Какой код должен быть у кнопки "Решение"? Сколько должно быть матриц? Хватит ли одной?
P.S.: Я новичок в VBA.

[вложение удалено администратором]

[вложение удалено администратором]

Администратор

Откуда вы взяли этот лист? Сами сделали или это вам выдали в учебном заведении?


Администратор

Мне кажется, что результат правильно сделать так (смотрите файл).
Кол-во будет вставлено под матрицей в H14, а строки будут закрашены в самой матрице.

[вложение удалено администратором]

nightofpromises


Администратор

Здесь две подпрограммы, запускайте подпрограмму "макрос".

макрос
Sub макрос()

    ' Создание в оперативной памяти компьютера поименованных областей - переменных.
        ' Переменную можно сравнить с обычным файлом, но переменная находится
        ' в оперативной памяти компьютера.
    ' Long означает, что в переменной могут быть только целые числа.
    Dim i As Long, j As Long
    ' Double означает, что в переменной могут быть целые и дробные числа.
    Dim sum As Double, counter As Long

   
    ' Удаление заливки в матрице, которая находится на эксель-листе.
    Range("D6:M12").Interior.ColorIndex = xlColorIndexNone
   
    ' For ... To ... Step - это цикл. Цикл используется, чтобы
        ' запускать одну и ту же команду несколько раз.
    ' Цикл по столбцам эксель-листа (со столбца D по M).
    For j = 4 To 13 Step 1
   
        ' Сброс переменной от предыдущего использования.
        sum = 0
       
        ' Цикл по строкам текущего столбца (строки с 6 по 12).
        ' Подсчёт суммы в текущем столбце.
        For i = 6 To 12 Step 1
            sum = sum + Cells(i, j).value
        Next i
       
        ' Поиск особого элемента согласно заданию.
        ' Закраска строки с особым элементом.
        For i = 6 To 12 Step 1
            ' If ... Then ... End If - используется, чтобы выбирать, какое действие сделать.
            ' Если элемент больше числа, которое находится в переменной "sum".
            If Cells(i, j).value > sum Then
                ' Закраска строки в отдельной подпрограмме.
                ' В эту подпрограмму передаём строку, которую надо закрасить.
                Color Range(Cells(i, 6), Cells(i, 12))
                ' Подсчёт особых элементов.
                counter = counter + 1
            End If
        Next i
       
    Next j

    ' Запись кол-ва особых элементов в эксель.
    Range("H14").value = counter

End Sub

Private Sub Color(row As Range)
   
    ' Private означает, что подпрограмма будет видна только в том модуле, где
        ' находится подпрограмма "макрос".
   
    ' Закраска строки.
    row.Interior.Color = 5296274
   
End Sub
[свернуть]

nightofpromises