第7講 配列の学習

第4話 2次元配列の利用

この話では、2次元配列を利用して、様々な行列を作っていきます。
第8講では、この話を基礎に4次魔方陣と6次魔方陣の作成に挑戦します。

1から順に並んでいる行列を自然配列と名付けます。
この自然配列を最初に作り、
それを転置(縦・横を反対にすること)したり、
逆順に表示させたり、
逆順を転置させたりします。
下のシートはH2に行数、H3に列数を入れて、実行ボタンを押すとそれらが表示されるものです。
実行画面は、H2に3、H3に4を入れた場合です。
シート
po1
実行画面例
po2
自然配列は、

Subプロシジャf0において、グローバル変数Dim a(100, 100) As Integer上にさせいしておき、
そのグローバル配列を利用して、自然配列の表示Subプロシージャf1、自然配列転置の表示Subプロシージャf2、
逆自然配列の表示Subプロシージャf3、逆自然配列転置の表示Subプロシージャf4によって、それぞれを表示させます。
では皆さん、コーティングしてみましょう。
解答例は、30行下。





















コード例
Dim a(100, 100) As Integer 'グローバル配列
Private Sub CommandButton1_Click()

  Dim h As Byte, o As Byte

  h = Cells(2, 8)
  o = Cells(3, 8)
  f0 h, o '自然配列の生成
  f1 h, o '自然配列の表示
  f2 h, o '自然配列の転置(縦・横交換)の表示
  f3 h, o '逆自然配列の表示
  f4 h, o '逆自然配列転置の表示

End Sub

'自然配列の生成
Sub f0(h As Byte, o As Byte)

  Dim i As Byte, j As Byte
  
  For i = 0 To h - 1
    For j = 0 To o - 1
      a(i, j) = o * i + j + 1
    Next
  Next

End Sub

'自然配列の表示
Sub f1(h As Byte, o As Byte)

  Dim i As Byte, j As Byte

  Cells(6, 1) = "自然配列"
  For i = 0 To h - 1
    For j = 0 To o - 1
      Cells(7 + i, 1 + j) = a(i, j)
    Next
  Next

End Sub

'自然配列の転置の表示
Sub f2(h As Byte, o As Byte)

  Dim i As Byte, j As Byte

  Cells(6, 3 + o) = "自然配列の転置"
  For i = 0 To o - 1
    For j = 0 To h - 1
      Cells(7 + i, 3 + j + o) = a(j, i)
    Next
  Next

End Sub

'逆自然配列の表示
Sub f3(h As Byte, o As Byte)

  Dim i As Byte, j As Byte

  Cells(6, 5 + h + o) = "逆自然配列"
  For i = 0 To h - 1
    For j = 0 To o - 1
      Cells(7 + i, 5 + j + h + o) = (o - 1) * h + h + 1 - a(i, j)
    Next
  Next

End Sub

'逆自然配列転置の表示
Sub f4(h As Byte, o As Byte)

  Dim i As Byte, j As Byte

  Cells(6, 7 + h + 2 * o) = "逆自然配列の転置"
  For i = 0 To h - 1
    For j = 0 To o - 1
      Cells(7 + i, 7 + j + h + 2 * o) = (o - 1) * h + h + 1 - a(i, j)
    Next
  Next

End Sub


Private Sub CommandButton2_Click()

  Rows("6:1000").Select
  Selection.ClearContents
  Range("H2:H3").Select
  Selection.ClearContents
  Cells(1, 1).Select

End Sub

結構頭が混乱しますね。
2次元は、ループにしても配列にしても難しいのです。
解説は次話で行います。


第3話へ 第5話へ

004


vc++講義へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ

数学研究室に戻る