Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Vba_расчеты

.pdf
Скачиваний:
33
Добавлен:
17.05.2015
Размер:
1.73 Mб
Скачать

При решении задачи A действия выполняются над числовыми коэффициентами, а имена неизвестных не участвуют в вычислениях. Поэтому при решении задачи в Excel будем хранить только коэффициенты и значения правых частей уравнений, записывая их в расширенную (n*(n+1))-матрицу Ab: A x b с расширенной (n (n 1)) -матрицей Ab

 

2

1

1 x

 

 

7

 

 

2

1

1

7

 

 

 

1

 

 

 

Ab Ab1

 

 

 

 

 

 

4

3

0 x2

 

10 ,

 

4

3

0

10

 

2 2

 

 

 

 

 

 

2 2

3

 

 

3 x3

 

11

 

 

11

Для изучения в Excel метода Гаусса с выбором главного элемента по столбцу для решения СЛАУ используем следующий алгоритм:

a. На k-ом (k=1,..., n-1) шаге среди строк с k-ой

 

 

0

1

0

 

 

 

 

по n-ую выбирают ту (допустим l-ую), кото-

P1

 

 

 

 

 

 

 

 

 

 

 

1

0

0

 

 

 

 

рая в k-ом столбце имеет наибольший по аб-

 

 

0

0

1

 

 

 

 

 

солютной величине элемент – главный эле-

 

 

 

 

 

 

 

 

 

 

 

4

 

3

0

10

 

мент. Эту строку (l-ую) матрицы Abk пере-

 

 

 

 

 

 

Ab1

 

 

 

 

 

 

 

 

ставляют с k-ой строкой. Перестановку на k-

P1

 

2

 

1 1

7

 

 

 

 

 

 

2

2

3

11

 

ом шаге при изучении метода в Excel удоб-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

но реализовывать умножением Pk Ab матрицы перестановок Pk

на

расширенную матрицу Ab. Матрица перестановок – это единичная матрица, в которой единицы с главной диагонали k-го и l-го столбца переставлены соответственно в l-ый и k-ый столбцы.

b. Далее готовится (в Excel) матрица

Lk , умножая

 

 

 

 

 

 

 

 

 

 

 

 

4

 

0

0

 

 

 

 

 

 

 

 

 

 

 

 

которую на расширенную матрицу

Abk , произ-

 

 

 

 

 

 

 

 

 

 

 

 

2

 

1

0

 

 

 

 

 

 

 

 

 

 

водят исключение неизвестных. При подготовке

 

 

2

0

 

 

 

 

 

(в Excel) сначала в единичную матрицу E на ме-

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

сто элементов k-го столбца, расположенных в

 

 

 

 

1

 

0

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

строках с k-ой по n-ую, переписывают элементы

 

L1

- 0,5

1

0

 

 

A с тем же расположением. А затем нормируют

 

 

 

 

0,5

 

0

 

 

 

 

 

 

 

 

1

 

 

их – делят все переписанные эле-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

3

 

0

10

 

 

 

 

 

 

 

менты на главный элемент.

Ab2 L1 P1 Ab1

 

 

 

 

 

 

 

 

 

c. Затем умножением Lk Abk выпол-

 

0

- 0,5

1

2

 

 

 

 

 

 

0

3,5

3

 

 

 

 

 

 

 

 

16

 

няется исключение k-го неизвест-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11

 

 

 

 

 

 

 

 

 

 

 

Abk,k Abn,k

ного из строк с (k+1)-ой по n-ую, то есть фактически обнуляются соответствующие элементы расширенной матрицы.

d. После (n-1)-го шага матрица системы A

 

 

 

 

 

 

 

 

4

3

0

10

становится верхней треугольной, то есть

 

 

 

 

 

 

 

 

имеет нули ниже главной диагонали. Ре-

Ab3

0

3,5

3

16

 

 

 

0

0

1,43

 

 

 

 

 

шается система уравнений с верхней

 

 

4,29

x3

4,29/1,43

3

 

 

треугольной матрицей просто: из по-

 

 

 

(16 3

3) / 3,5 2

 

 

следнего уравнения находится неизвест-

x2

 

 

ное xn , которое затем подставляется в

x1 (10 0 3 3 2) / 4 1

 

 

 

 

 

 

 

 

предыдущие уравнения. Затем находится

 

 

 

 

 

 

 

 

 

 

 

 

 

 

xn 1, и так далее. То есть осуществляется обратная подстановка метода Гаусса.

Отметим особенности реализации алгоритма

Перестановку строк выполняется умножением матрицы перестановок на матрицу Ab. Матрица перестановок k-ой и l-ой строк – это единичная матрица, у которой в k-ой и l-ой строках единицы с главной диагонали смещены соответственно в l-ой и k-ой столбцы.

Для умножения матриц в Excel имеется функция МУМНОЖ, а вот для автоматического создания единичной матрицы E в выделенной квадратной области следует подготовить специальный макрос (который будем вызывать по нажатию клавиш Ctrl+Shift+E или щелчку по связанной с макросом фигуре – кружку E, см. табл. 1.1). Операцию перестройки единичной матрицы в матрицу перестановок будем выполнять вручную.

Исключение неизвестных на k-ом шаге выполняется умножением матрицы исключений на расширенную матрицу. Матрица исключений получается из единичной после замены на сходственных элементов в k-ом столбце и их нормировании – делении на элемент Abk,k . Эту замену можно выполнять вручную (специальной вставкой), а вот для нормирования полезно разработать специальный макрос (его будем вызывать по нажатию клавиш Ctrl+Shift+L или щелчку по L- кружку).

Обратный ход метода Гаусса можно выполнять вручную, но можно подготовить для этого (и с целью контроля) специальный макрос, ко-

12

торый будет решать СЛАУ с верхней треугольной матрицей (его будем вызывать по нажатию клавиш Ctrl+Shift+x или щелчку по x-кружку).

Макрос, используемый на этапах a и b алгоритма:

Sub E( )

' Запускается по Ctrl+Shift+E и создаѐт единичную матрицу E

Dim TR As Range

' в выделенной прямоугольной области.

Dim n As Integer

 

For Each TR In Selection.Areas

' Цикл по выделенным областям.

n = Sqr(TR.Count)

' Определение числа выделенных ячеек.

i1 = TR.Row: j1 = TR.Column

' Номера начальных строки и столбца.

TR = 0

 

' Обнуление диапазона и запись

For i = 1 To N: Cells(i1 + i - 1, j1 + i - 1) = 1: Next i ' на главную диагональ.

Next

 

' Конец цикла по выделенным областям

End Sub

 

 

 

Макрос, используемый на этапе b алгоритма:

Sub Lk()

' запускается по Ctrl+Shift+L и нормирует главный столбец

Dim TR As Range: Dim n As Integer

For Each TR In Selection.Areas

' Цикл по выделенным областям.

n = TR.Count: i1 = TR.Row: j1 = TR.Column ' опр. числа эл-тов и индексов For i = i1 + 1 To i1 + n - 1

Cells(i, j1) = - Cells(i, j1) / Cells(i1, j1)

Next i Cells(i1, j1) = 1

Next End Sub

Макрос для этапа d алгоритма:

Sub TrSolve( )

' запускается по Ctrl+Shift+x и решает СЛАУ

Dim n As Integer

 

' с верхней треугольной матрицей

Dim TR As Range

 

' в выделенной прямоугольной области.

For Each TR In Selection.Areas

' Цикл по выделенным областям.

in = TR.Row: jn = TR.Column

' строка и столбец начала матрицы

n = TR.Rows.Count

 

' число строк матрицы

If n + 1 <> TR.Columns.Count Then

13

MsgBox "Выделена не подходящий диапазон", , "TrSolve": Exit Sub

End If

Dim b( ) As Double: ReDim b(n)

For i = 1 To n: b(i) = TR.Cells(i, n + 1): Next 'готовим массив b правых чаcтей

For k = n To 1 Step - 1

 

 

Cells(in + n, jn + k - 1) = b(k) / TR.Cells(k, k)

' вычисление и запись Xk

For i = 1 To n – 1

' цикл подстановки в уравнения вычисленного Xk

b(i) = b(i) - TR.Cells(i, k) * Cells(in + k - 1, jn + n + 1)

Next i Next k

Next End Sub

Описание решения на Excel задачи A

При решении задачи A (на этапе 1 ) расширенную матрицу Ab1 поме-

щаем в диапазон G2:J4 (см. таблицу 1.1).

 

 

Таблица 1.1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A

 

B

C

D

 

E

 

 

F

G

H

I

 

J

 

 

1

 

 

 

Матрица перестановок (шаг k=1)

2

 

Расширенная матрица СЛАУ

 

 

1

 

2

 

 

 

0

1

 

0

 

 

 

 

2

1

1

 

7

 

3

 

 

P1=

1

0

 

0

 

 

 

Ab1=

4

3

0

 

10

 

4

 

 

 

0

0

 

1

 

 

 

 

-2

2

3

 

11

 

5

 

 

 

Матрица исключений (шаг k=1)

4

 

Строки переставлены (шаг k=1)

 

 

3

 

6

 

 

 

1

0

 

0

 

 

 

 

4

3

0

 

10

 

7

 

 

L1=

-0,5

1

 

0

 

 

 

P1*Ab1=

2

1

1

 

7

 

8

 

 

 

0,5

0

 

1

 

 

 

 

-2

2

3

 

11

 

9

 

 

 

Матрица перестановок (шаг k=2)

6

 

Матрица СЛАУ после шага k=1

 

5

 

10

 

 

 

1

0

 

0

 

 

 

 

4

3

0

 

10

 

11

 

 

P2=

0

0

 

1

 

 

 

Ab2=L1*(P1*Ab1)=

0

-0,5

1

 

2

 

12

 

 

 

0

1

 

0

 

 

 

 

0

3,5

3

 

16

 

13

 

 

 

Матрица исключений (шаг k=2)

8

 

 

Строки переставлены шаг k=2

 

7

 

14

 

 

 

1

0

 

0

 

 

 

 

4

3

0

 

 

10

 

15

 

 

L2=

0

1

 

0

 

 

 

P2*Ab2=

0

3,5

3

 

16

 

16

 

 

 

0

0,14286

 

1

 

 

 

 

0

-0,5

1

 

2

 

17

 

 

 

 

 

 

 

 

 

 

 

 

Матрица СЛАУ после шага k=2

 

9

 

18

 

 

 

 

 

 

 

 

 

 

 

 

4

3

0

 

10

 

19

 

 

 

 

 

 

 

 

 

 

 

Ab3=L2*(P2*Ab2)=

0

3,5

3

 

16

 

20

 

 

 

 

 

 

 

 

 

 

 

 

0

0

1,4286

4,2857

 

21

10 Решение СЛАУ с верхней треугольной матрицей x1,x2, x3=

1

2

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В 1-ом столбце Ab1 главный элемент равен 4, он находится во 2-ой строке. В соответствии с этим, (на этапе 2 ) слева в ячейках B2:D4 на-

14

биваем (или переделываем из единичной) матрицу перестановок P1, которая будет задавать перестановки 1-ой и 2-ой строк. Под матрицей Ab1 (в диапазоне G6:J8) разместим (на этапе 3 ) матрицу, которая получится как результат умножения P1 на Ab1.

Напомним, как выполняется в Excel умножение матриц. Для этого: выделяем G6:J8, нажимаем F2, в ячейку G6 вставляем как формулу функцию МУМНОЖ. Вызвав эту функцию, указываем сначала диапазон B2:D4 первой матрицы, а затем – второй G2:J4. Для записи матрицы результата в диапазон, начинающийся в ячейке G6, следует нажать

Ctrl+Shift+Enter.

После получения матрицы P1*Ab1 с переставленными 2-ой и 1-ой строками готовим (на этапе 4 ) слева матрицу L1 для исключения неиз-

вестных из строк со 2-ой по 3-ью (c k+1 по n) первого столбца. Для этого выделяем диапазон B6:D8 (строк c k по n) и запускаем макрос E создания единичной матрицы (по Ctrl+Shift+E или кликнув по кружку E - фигуры, с которой мы связали этот макрос). Затем выделяем в матрице P1*Ab1 1-ый столбец (G6:G8) с главным элементом. Копируем значе-

ния из G6:G8 и, выделив B6:B8, помещаем специальной вставкой (зна-

чения) в столбец единичной матрицы. Не сбрасывая выделение B6:B8, запускаем (по Ctrl+Shift+L или кликнув по L-кружку фигуры) макрос Lk нормирования этого вектора. В результате получим показанную в таблице 1.1 (для этапа 4 ) матрицу L1. После умножения (на этапе 5 ) этой

матрицы на расширенную матрицу P1*Ab1 (диапазон G6:J8) заносим в G10:J12 матрицу произведения Ab2=L1*(P1*Ab1) с исключенным неиз-

вестным x1 из G11:G12.

Аналогичным образом действуем дальше (на этапах 6 , 7 , 8 , 9 ) до получения матрицы Ab3 (G18:J20), у которой все элементы под главной диагональю (левой (3х3)-подматрицы Ab3) равны нулю. Расширенная матрица Ab3 соответствует СЛАУ с верхней треугольной матрицей; она просто решается последовательным вычислением x1, x2 , x3 - обратной подстановкой. Еѐ алгоритм реализован в макросе TrSolve, который запускается по Ctrl+Shift+x (или кликнув по соответствующему x-кружку фигуры) при предварительно выделенной расширенной матрице

(G18:J20) и выводит (на этапе 10 ) вычисленные неизвестные x1, x2 , x3

15

системы в ячейки G21:I21 под соответствующими столбцами верхней треугольной матрицы Ab3.

1.3. Применение в Excel процедуры метода Гаусса

Задача В. Используя обращение к стандартной процедуре решения СЛАУ методом Гаусса, составить в Excel «функцию, определѐнную пользователем» для решения СЛАУ.

Замечание. В Excel есть функция МОБР для обращения матриц, с помощью которой решают СЛАУ, по схеме:

 

 

 

 

 

Ax b

 

 

x A 1b

 

 

 

 

 

 

 

 

 

Например, матрица A (см. рис. 1.1) записана в ячейки диапазона A1:C3,

а для

моделиро-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A

 

 

B

 

 

C

 

 

D

 

 

E

 

вания

реальных

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

100000

 

200000

 

300000

 

700000

 

733184

 

 

 

 

 

 

 

 

 

 

 

 

вычислений

по-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

400000

 

500000

 

600000

 

1000000

 

1044480

 

следний

еѐ

ко-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

700000

 

800000

 

900000

 

1100000

 

1155072

 

эффициент

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

 

-4,908E+13

 

9,817E+13

 

-4,908E+13

 

3,534E+15

 

 

 

900000

в

ячейке

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

С3 задан с отно-

Рис. 1.1.

 

сительной погрешностью 5×10-15 представления чисел в машине. Определитель матрицы A, вычисленный с помощью функции МОПРЕД, ра-

вен -122,236. Вычисленные через обратную матрицу A 1 и столбец b правых частей (D1:D3) неизвестные x1, x2, x3, помещены в ячейки A4:C4 под соответствующие столбцы матрицы A.

Встречаются руководства, в которых для «проверки» полученные неизвестные умножают на матрицу A, ожидая получить вектор b. В нашем случае после умножения этот вектор (он записан в ячейках E1:E3) с инженерной погрешностью (до 4%) совпадает с исходным. Но оказывается, мы «решили» систему, которая не имеет решения – решили «без проблем» и не почувствовали этого. То есть процедура МОПР не выявляет особенных матриц и спокойно вычисляет обратные матрицы и в случаях, когда этих матриц не существует. Такие случаи возможны, когда СЛАУ составлена не верно, и какие-либо еѐ уравнения является линейной комбинацией других уравнений системы.

16

Кроме того методически не правильно применять для решения СЛАУ более трудоѐмкую процедуру обращения матриц (вычисление A 1 из

AA 1 E равносильно решению стольких СЛАУ, сколько имеется неизвестных). Поэтому целесообразно пополнить арсенал функций Excel процедурой эффективного решения СЛАУ с оценкой близости системы к вырожденной – с оценкой числа обусловленности.

Решение задачи В. Рассмотренный алгоритм решения СЛАУ методом Гаусса удобно записать на Фортране – языке, хорошо подходящем для записи алгоритма. Упрощѐнный (без оценки числа обусловленности), но более наглядный, вариант процедуры представлен ниже:

Subroutine KGAUSS(Ab, N, X, IAI)

Real(8) Ab(N,N+1), X(N)

! Описание массивов

IAI=1

 

 

 

Do k=1, N

!

<==> For k=1 To N ! Перебор строк - шаги прямого хода

Call CMEHA

 

! Выбор и анализ гл. элемента

If( IAI == 0 ) Return ! <==> Exit Sub ! Выход, если гл. элемент = 0

Do i=k+1, N

 

! Перебор строк с k+1-ой по N-ую

Ab(i,k) = Ab(i,k)/Ab(k,k)

 

Ab(i,k+1:N+1) = Ab(i,k+1:N+1) - Ab(i,k)*Ab(k,k+1:N+1)

End Do

 

 

 

End Do

!

<==> Next k

 

Do k = N, 1,-1

 

! Обратная подстановка (обратный ход)

X(k)=Ab(k,N+1)/Ab(k,k)

Ab(1:N-1,N+1) = Ab(1:N-1,N+1) - Ab(1:N-1,k)*X(k)

End Do

Contains ! ------- Внутренние подпрограммы: ----------------------------------------

Subroutine CMEHA ! Процедура выбора гл. элемента и перестановки строк

Real(8) W(N+1) ; Integer L(1)

! Описание массивов

L=MaxLoc(abs(Ab(K:N,K)))

! Опр. номера строки с гл. элементом

W=Ab(K,:); Ab(K,:)=Ab(L(1)+K-1,:); Ab(L(1)+K-1,:)=W ! Перестановки

If(abs(Ab(K,K) )== 0D0) IAI=0 !

IAI - признак вырожденности системы

End Subroutine End

Замечание. В Фортране примечания записываются справа от знака «!». Цикл Do – End Do Фортрана соответствует циклу For – Next Бейсика. Запись A(i, j1:j2) указывает на элементы с j1-го по j2-ой в i-ой строке, а запись A(i, : ) - на все элементы i-ой строки матрицы A.

17

Дополнив процедуру KGAUSS оценкой числа обусловленности, оттранслировав и включив дополненную процедуру KFGAUSS (Карл Фридрих Гаусс) в библиотеку (названную нами Math32.dll) динамического вызова, получим возможность обращаться к ней из VBA. Однако при этом следует учесть ряд особенностей. Во-первых, необходимо в VBA декларировать подключаемую процедуру, записав:

Declare Sub KFGAUSS Lib "С:\Путь\Math32.dll" (ByRef Ab As Double, _

ByVal N As Long, ByRef X As Double, ByRef CD As Double)

Во-вторых, следует учесть, что в процедуру надо передавать адрес начала массивов, а не весь массив, включая границы индексов, как это делается в Бейсике. То есть обращение из VBA к процедуре KFGAUSS может иметь вид:

Call KFGAUSS(AiB(1, 1), N, X(1), CD)

Отметим ещѐ одну особенность реализации процедуры KFGAUSS, позволяющую вычислять определитель левой квадратной (N×N)-части расширенной матрицы AiB. Этот определитель вычисляется как произведение диагональных элементов матрицы, а знак произведения, который зависит от чѐтного или нечѐтного числа выполненных перестановок, кодируется знаком переменной CD, то есть определитель

det(A)= Aib(1,1)×…×AiB(N,N)×знак(CD).

Число обусловленности матрицы системы положительное и равно абсолютной величине |CD|. Если |CD| порядка десятков (не больше 1000), то система достаточно хорошо обусловлена, и точность еѐ решения высокая. Большая величина |CD|, скажем, 1012, говорит о близости системы к вырожденной, |CD|=1E32 указывает на точную вырожденность системы. Отметим, что для представленной на рис. 1.1 СЛАУ число обусловленности равно 3,534×1015. Оно получено в ячейке D4 с помощью разбираемой ниже функции пользователя для решения СЛАУ и указывает на близость рассмотренной системы к вырожденной.

С учѐтом сделанных замечаний в Excel функция, определённая пользователем, для решения СЛАУ и выдачи числа обусловленности матрицы системы, может иметь следующий вид:

18

Public Function xCdGauss(Ab As Range) As Variant

Dim N As Long, CD As Double

N = Ab.Rows.Count

ReDim AiB(1 To N, 1 To N + 1) As Double

ReDim X(1 To N + 1) As Double

For i = 1 To N

For j = 1 To N + 1

AiB(i, j) = Ab(i, j)

Next j

Next i

Call KFGAUSS(AiB(1, 1), N, X(1), CD)

 

 

 

 

 

 

 

 

Рис. 1.2.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X(N + 1) = Abs(CD)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A

 

 

B

 

 

C

 

 

D

 

 

xCdGauss = X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

2

1

1

7

 

 

 

 

 

 

 

 

End Function

 

 

 

2

 

4

3

0

10

 

Функция

используется

следующим

 

 

3

 

-2

2

3

11

 

 

 

4

 

 

1

 

 

2

 

 

3

 

 

13,52941

 

 

образом. Для решения СЛАУ с рас-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 1.3.

 

 

 

 

ширенной

матрицей A1:D3 коэффи-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

циентов, например, показанной на рис. 1.3, выделяется горизонтальный диапазон, например, A4:D4 из N+1 ячеек (N=3 – число уравнений). Затем нажимают клавишу F2 и выбирают в ленте: Формулы, Вставить функцию, Категория - Определѐнные пользователем, xCdGauss, OK. В

возникшем окне Аргументы функции (см. рис. 1.2) указывают для аргумента Ab диапазон A1:D3 ячеек с коэффициентами расширенной матрицы СЛАУ, а затем нажимают Ctrl+Shift+Enter. В ячейках A4:C4 появятся вычисленные значения неизвестных СЛАУ, а в ячейке D4 число обусловленности матрицы системы.

Подготовка на листе матриц с вычисляемыми коэффициентами

Часто в математических расчѐтах встречаются СЛАУ, коэффициенты которых могут быть вычислены по сравнительно простым формулам. Как правило, эти СЛАУ имеют большое число уравнений. При необходимости размещения коэффициентов таких систем в ячейках листа Excel целесообразно подготовить формулу, задающую коэффициенты,

19

и использовать вместе с ней заранее составленную (стандартную) процедуру, заполняющую числами ячейки прямоугольного диапазона.

Идею организации подобного заполнения рассмотрим на следующем простом примере

Пример 1.9. Подготовить в выделяемом квадратном диапазоне единичную матрицу E.

Решение примера начнѐм с присвоения имѐн i, j, f соответственно ячейкам I1, J1, F1 рабочего листа. Переменными i и j будем обозначать соответственно строки и столбцы выделенного диапазона, а в ячейку с именем f запишем формулу =ЕСЛИ(i=j; 1; 0) . В процедуре, заполняющей выделяемый диапазон, будем ссылаться на поименованные ячейки:

Sub PutKoeff()

Dim R As Range

Set R = Application.InputBox(prompt:="Укажите матрицу", Type:=8)

i1 = R.Row: j1 = R.Column

 

For i = 0 To R.Rows.Count - 1

 

For j = 0 To R.Columns.Count - 1

 

Range("i") = i + 1

' запись в ячейку i номера строки

Range("j") = j + 1

' запись в ячейку j номера столбца

Cells(i1 + i, j1 + j) = Range("f")

' перезапись в ячейку диапазона значения из f

Next j

 

Next i

 

End Sub

 

Свяжем запуск данного макроса с фигурой (как это упомянуто вскользь в разделе «Описание решения на Excel задачи A»). Для этого вставим на лист (или, как это было сделано ранее, на рисунок SmartArt) какую-либо фигуру, вызвав нажатием правой клавишей мыши контекстное меню, назначим макрос данному объекту. После этого макрос запускается щелчком по фигуре, мы выделяем квадратный диапазон ячеек, в котором затем формируется единичная матрица.

В следующем примере разбирается более сложный случай.

20

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]