Форум по VBA и MS Office

VBA, Excel => VBA, макросы в Excel => Тема начата: Vitalik_MC от 26 ноября 2014, 22:54

Название: VBA: Максимальный элемент массива.
Отправлено: Vitalik_MC от 26 ноября 2014, 22:54
Матрица 4x4. Нужно найти максимальный элемент, и, если можно, поменять его с первым элементом.
Название: Re: VBA: Максимальный элемент массива.
Отправлено: Администратор от 27 ноября 2014, 08:16
Макрос работает с активным 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
[свернуть]
Название: Re: VBA: Максимальный элемент массива.
Отправлено: Vitalik_MC от 27 ноября 2014, 10:44
Спасибо большое, но я не умею пользоваться макросами.
Название: Re: VBA: Максимальный элемент массива.
Отправлено: Администратор от 27 ноября 2014, 10:47
Vitalik_MC, какая у Вас версия Excel - 2003, 2007 или другая?
Название: Re: VBA: Максимальный элемент массива.
Отправлено: Vitalik_MC от 27 ноября 2014, 10:55
Версия 2010.
Название: Re: VBA: Максимальный элемент массива.
Отправлено: Администратор от 27 ноября 2014, 11:15
Действия в Excel
Действия в VBA
Название: Re: VBA: Максимальный элемент массива.
Отправлено: Vitalik_MC от 27 ноября 2014, 12:31
Получилось, спасибо огромное!