VBA: Максимальный элемент массива.

Автор Vitalik_MC, 26 ноября 2014, 22:54

Vitalik_MC

Матрица 4x4. Нужно найти максимальный элемент, и, если можно, поменять его с первым элементом.

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

Макрос работает с активным excel-листом.

Макрос
Sub p1()
   
    ' Создание в оперативной памятик компьютера поименованной области - массива dblMatrix.
        ' Двумерный массив называется матрица. Двумерный массив, это когда массив
        ' можно мысленно сравнить с обычной таблицей, у которой есть строки и столбцы.
    ' Double - означает, что в матрице могут быть только числа. Числа могут быть целые и дробные.
    ' Первые 1 to 4  означают, что в матрице будет четыре строки.
    ' Вторые 1 to 4  означают, что в матрице будет четыре столбца.
    Dim dblMatrix(1 To 4, 1 To 4) As Double
    ' Создание в оперативной памяти компьютера поименованной области - переменной dblMaxValue.
        ' Переменные используются, чтобы помещать в них какие-нибудь данные.
    ' Long означает, что в переменной могут быть только целые числа (дробные не могут).
    Dim dblMaxValue As Double, lngMaxI As Long, lngMaxJ As Long
    Dim dblTemporary As Double
    Dim i As Long, j As Long
   
   
    '1. Заполнение матрицы числами, чтобы было чего анализировать.
    ' Числа берутся из Excel, из активного листа.
    ' For ... To ... Step - называется циклом. Цикл используется, чтобы делать
        ' одну и ту же команду несколько раз.
    For i = 1 To 4 Step 1
        For j = 1 To 4 Step 1
            dblMatrix(i, j) = Cells(i, j).Value
        Next j
    Next i
   
    '2. Поиск в матрице максимального числа.
        ' Сначала за максимальное числ принимается первое число и затем
        ' все остальные числа сравниваются с этим числом. Если какое-то число
        ' окажется больше, то это новое число запоминается и затем уже
        ' с ним сравниваются остальные числа. И т.д.
    dblMaxValue = dblMatrix(1, 1)
    ' Запись номера строки и номера столбца.
    ' Эти переменные нужны, чтобы потом поменять местами первый элемент и максимальный элемент.
    lngMaxI = 1
    lngMaxJ = 1
    For i = 1 To 4 Step 1
        For j = 1 To 4 Step 1
            ' If ... Then ... End If - используется для выбора действия.
            ' Если число в матрице больше числа в переменной.
            If dblMatrix(i, j) > dblMaxValue Then
                ' Запись в переменные новых данных.
                dblMaxValue = dblMatrix(i, j)
                lngMaxI = i
                lngMaxJ = j
            End If
        Next j
    Next i
   
    '3. Смена местами первого и максимального элементов.
        ' Чтобы это сделать нужна ещё одна переменная, в которую поместятся данные.
        ' Иначе при обмене данных в одном из элементов данные будут стёрты.
    ' Запись максимального числа в переменную dblTemporary.
    dblTemporary = dblMatrix(lngMaxI, lngMaxJ)
    ' Помещение данных из первого элемента в максимальный.
    dblMatrix(lngMaxI, lngMaxJ) = dblMatrix(1, 1)
    ' Помещение данных из переменной в первый элемент.
    dblMatrix(1, 1) = dblTemporary
   
    '4. Вывод результата в Excel, справа от исходной матрицы.
    For i = 1 To 4 Step 1
        For j = 1 To 4 Step 1
            ' + 5 - чтобы данные смещались вправо.
            Cells(i, j + 5).Value = dblMatrix(i, j)
        Next j
    Next i

End Sub
[свернуть]

Vitalik_MC

Спасибо большое, но я не умею пользоваться макросами.

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

Vitalik_MC, какая у Вас версия Excel - 2003, 2007 или другая?

Vitalik_MC


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

Действия в Excel

  • На активный лист Excel в диапазон A1:D4 поместите какие-нибудь числа (придумайте);
  • Файл - Параметры - Настройка ленты - в правом списке поставьте флажок "Разработчик" - OK. Обратите внимание, что на ленте появилась новая вкладка "Разработчик";
  • вкладка "Разработчик" - кнопка "Visual Basic". Запустится программа "Microsoft Visual Basic for Applications".
Действия в VBA

  • В VBA слева есть область "Project - ..." - щёлкните два раза по "ЭтаКнига" - справа будет пустая область и будет мигать курсор - вставьте туда макрос, который я выложил на форуме;
  • затем поставьте курсор внутрь кода (в любое место) и вверху нажмите зелёную стрелку;
  • макрос будет запущен;
  • перейдите в Excel и посмотрите результат: справа от тех чисел, которые Вы ввели, должны появиться числа.

Vitalik_MC

Получилось, спасибо огромное!