RFpro.ru: Пакет Microsoft Office

  Все выпуски  

RFpro.ru: Пакет Microsoft Office


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты в разделе

Megaloman
Статус: Мастер-Эксперт
Рейтинг: 143
∙ повысить рейтинг »
CradleA
Статус: Академик
Рейтинг: 86
∙ повысить рейтинг »
Valery N
Статус: Мастер-Эксперт
Рейтинг: 2
∙ повысить рейтинг »

∙ Пакет MSOffice

Номер выпуска:1030
Дата выхода:18.03.2021, 18:45
Администратор рассылки:Megaloman (Мастер-Эксперт)
Подписчиков / экспертов:5 / 30
Вопросов / ответов:1 / 1

Консультация # 200411: Прошу помощи в данном вопросе, заранее извините что не пишу в виде формул (пытался, не получается) Заранее спасибо...

Консультация # 200411:

Прошу помощи в данном вопросе, заранее извините что не пишу в виде формул (пытался, не получается)
Заранее спасибо

Дата отправки: 13.03.2021, 18:21
Вопрос задал: 23071996 (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Megaloman (Мастер-Эксперт):

Здравствуйте, 23071996!
Вот первый способ:
Задача решена без привлечения макроса. Файл ya210313.xlsx (14.0 кб)
Получение размерности матрицы и её генерация осуществляется по клавише F9 (пересчет листа). Результат на экране:


Второй способ:
Задача решена посредством макроса. Файл ya210313.xlsm (25.4 кб)
Тут я был на распутье: то ли использовать стандартную функцию листа для перемножения матриц, то ли написать свою. Выбрал второй вариант. Определители считаются стандартной функцией листа: написать свою функцию вычисления определителя слишком трудоемко.

Код
Sub rrr()

Const Nmin = 7          ' Минимальная размерность матриц
Const Nmax = 15         ' Максимальная размерность матриц
Const R1A = "C6"        ' Адрес ячейки с элементом A11
Const R1B = "T6"        ' Адрес ячейки с элементом B11
Const RN = "B3"         ' Адрес ячейки для отображения размерности матрицы N
Const RDA = "H3"        ' Адрес ячейки для отображения определителя ||A||
Const RDB = "X3"        ' Адрес ячейки для отображения определителя ||B||

Dim N, i, j, k
Dim RRA, RRB

Randomize
N = Int((Nmax - Nmin + 1) * Rnd + Nmin)     ' Определение размерности матрицы случайным образом

RRA = R1A + ":" + Range(R1A).Offset(N - 1, N - 1).Address
RRB = R1B + ":" + Range(R1B).Offset(N - 1, N - 1).Address

ReDim A(1 To N, 1 To N)
ReDim B(1 To N, 1 To N)

For i = 1 To N              ' Заполнение матрицы A
    k = 1
    For j = 1 To N
        If j < i Then
            A(i, j) = 0
        Else
            k = k + 1
            A(i, j) = k
        End If
    Next
Next

Call Matrix(A, A, B, N)
Call Matrix(B, A, B, N)
Call Matrix(B, A, B, N)

Range(R1A + ":" + Range(R1A).Offset(Nmax - 1, Nmax - 1).Address).ClearContents
Range(R1B + ":" + Range(R1B).Offset(Nmax - 1, Nmax - 1).Address).ClearContents

Range(RN) = N
Range(RRA) = A
Range(RRB) = B
Range(RDA) = Application.WorksheetFunction.MDeterm(A)
Range(RDB) = Application.WorksheetFunction.MDeterm(B)

End Sub

Sub Matrix(M1, M2, M12, N)      ' Процедура перемножения квадратных матриц.
    ReDim TMP(1 To N, 1 To N)
    Dim i, j, k
    For i = 1 To N
        For j = 1 To N
            TMP(i, j) = 0
            For k = 1 To N
                TMP(i, j) = TMP(i, j) + M1(i, k) * M2(k, j)
            Next
        Next
    Next
    
    For i = 1 To N
        For j = 1 To N
            M12(i, j) = TMP(i, j)
        Next
    Next
End Sub
Результат сюда не вывожу. Я использовал в этой книге форматирование из первого способа+добавил кнопочку для запуска макроса, так что вид результата отличается очень мало. Однако этот макрос можно запустить на любом рабочем листе, при этом форматирование для удобочитаемости ответа ляжет на Вас: задача форматирования результатов макросом не ставилась.

Консультировал: Megaloman (Мастер-Эксперт)
Дата отправки: 14.03.2021, 14:33
Рейтинг ответа:

НЕ одобряю +1 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное