- 前回の回答
Sub ベクトル()
Dim n1 As Integer, n2 As Integer, i As Integer
Dim x() As Single, y() As Single, z() As Single
Sheets(1).Select
i = 1
Do While Selection.Cells(i, 1) <> "" And IsNumeric(Selection.Cells(i, 1))
i = i + 1
Loop
n1 = i - 1
Sheets(2).Select
i = 1
Do While Selection.Cells(i, 1) <> "" And IsNumeric(Selection.Cells(i, 1))
i = i + 1
Loop
n2 = i - 1
If n1 = n2 Then
ReDim x(n1)
ReDim y(n1)
ReDim z(n1)
Sheets(1).Select
For i = 1 To n1
x(i) = Selection.Cells(i, 1)
Next i
Sheets(2).Select
For i = 1 To n1
y(i) = Selection.Cells(i, 1)
Next i
For i = 1 To n1
z(i) = x(i) + y(i)
Next i
Sheets(3).Select
For i = 1 To n1
Selection.Cells(i, 1) = z(i)
Next i
Else
MsgBox ("ベクトルの型が異なるので足し算できません")
End If
End Sub - 行列の足し算
ベクトルではなく次のように行列が入力されている場合について足し算するプログラムを書きましょう。
+ →
このように、縦横の2つの方向に数字が並んでいるときには、それを記憶する配列も添え字が2つ必要です。
Dim x(4,3) As Single
と書くと、
x(1,1), x(1,2), x(1,3)
x(2,1), x(2,2), x(2,3)
x(3,1), x(3,2), x(3,3)
x(4,1), x(4,2), x(4,3)
の12個が使えるようになります。(注:正確にはx(0,0)なども使えるので20個使えます)
この配列にシートから数字を読み込むためには
x(1,1)=Selection.Cells(1,1)
x(2,1)=Selection.Cells(2,1)
x(3,1)=Selection.Cells(3,1)
x(4,1)=Selection.Cells(4,1)
x(1,2)=Selection.Cells(1,2)
x(2,2)=Selection.Cells(2,2)
x(3,2)=Selection.Cells(3,2)
x(4,2)=Selection.Cells(4,2)
x(1,3)=Selection.Cells(1,3)
x(2,3)=Selection.Cells(2,3)
x(3,3)=Selection.Cells(3,3)
x(4,3)=Selection.Cells(4,3)
と書きますが、この書き方だと行列の成分の個数と同じ数だけプログラムを繰り返し書かなければなりません。 繰り返す部分をFor文を使ってまとめましょう。For i=1 to 4
x(i,1)=Selection.Cells(i,1)
Next i
For i=1 to 4
x(i,2)=Selection.Cells(i,2)
Next i
For i=1 to 4
x(i,3)=Selection.Cells(i,3)
Next iこのようにすると少しはまとめることが出来ますが、まだまだ似たようなプログラムを3回書かなければなりません。
For i=1 to 4
x(i,1)=Selection.Cells(i,1)
Next iこの赤い部分だけが1, 2, 3と変わりながら繰り返されているので、さらにFor文を使って繰り返します。
For j=1 to 3
For i=1 to 4
x(i,j)=Selection.Cells(i,j)
Next i
Next jこのように書くと、Sheet1の行列を配列xに読み込むことが出来ました。
- 課題1:4行3列の行列の足し算を行うプログラムを完成させなさい。
課題2:行列の型を調べて、行の数同士が等しく、列の数同士が等しい時だけ行列の足し算をし、そうでないときは「行列の型が異なるので足し算できません」と表示するプログラムを作ってください。If 文で条件が二つ以上あるときは、 And や Or を使います。
Amazonブラックフライデー、11月29日〜12月6日に開催
-
Amazonは、年末最後のビッグセール「Amazonブラックフライデー」を2024年11月29日(金)0時〜12月6日(金)23時59分まで開催する。セール開催に先駆け、先行セールを27日と28日に実施する。
プライム会...
0 件のコメント:
コメントを投稿