2007-10-17

配列

今回から、具体的なプログラミングについて解説します。レポート課題は講義のときに指定します。
  1. 前回では、
     x1=cells(1,1)
     x2=cells(2,1)
     x3=cells(3,1)
    のように、合計する3つのセルの内容をそれぞれ記憶するための変数を用意しましたが、この方法ではFor文を使ってまとめられないので、足すセルの数が増えるとプログラムが長くなってしまいます。 そこで配列というものの使い方を勉強しましょう。 まず前回のことを思い出しながらSub 練習3()というプログラムを作ってください。その中に以下の様に書いていきます。

    最初に、3つのセルの内容を記憶する配列を用意します。
     Dim x(3) as single, wa as single, i as integer
    綴りを正しく入力すると、VBAの専門用語(予約語と呼びます)の先頭文字は大文字に変わります。x(3)はセルの内容を記憶する変数、waは後で使います。iはfor文で使いますので整数型(integer)です。

    次に配列へセルの内容を記憶させます。前回同様
     x(1)=cells(1,1)
     x(2)=cells(2,1)
     x(3)=cells(3,1)
    でも動きますが、このように何度も似たようなことを書く代わりに、今回は配列を使っているのでFor文を使って
     for i=1 to 3
       x(i)=cells(i,1)
     next i
    のようにまとめて書きます。 for文で繰り返される部分は右にずらして書いておくと後で読みやすいです。

    記憶させたら、今度は足します。前回の1+2+・・・+10の計算を参考にして
     wa=0
     wa=wa+x(1)
     wa=wa+x(2)
     wa=wa+x(3)
    で、足すことは出来ますが、簡潔にするために代わりにFor文を使って
     wa=0
     for i=1 to 3
       wa=wa+x(i)
     next i
    のようにまとめます。 計算結果を表示する部分は前回と同じなので省きます。以上の説明を元に、プログラムを完成させてください。

    全体の流れは

    Sub 練習()
    Dim x(3) as single

    セルに書かれている数字を配列x(i)に読み込みます。

    配列x(i)の値を足します。

    Cells(4, 1) = "合計"
    Cells(4, 2) = wa

    End Sub

    これが今日のプログラムの基本です。この後で、このプログラムを発展させていきます。

  2. 集計するための数字がいつもA1セル以降に存在するとは限りません。例えばC3,C4,C5セルに書かれていたらどうしましょうか。
     x(i)=cells(i+2,3)
    でも正しいですが、プログラムを書くときに勘違いしやすいです。その場合はまず
    cells(3,3).select
    と書きます。するとC3セルが選択されます。この後
     x(1)=selection.cells(1,1)
    と書くと、選択されたC3セルを(1,1)とみなしてセルを参照できますので、
     x(2)=selection.cells(2,1)
    と書くとC4セルに、
     x(3)=selection.cells(3,1)
    と書くとC5セルになります。 上のプログラム同様、これもFor文を使ってまとめましょう。 これを使って、C3,C4,C5セルに書かれた数字を合計するプログラムを完成させてください。

  3. ここまではプログラム作成時に、合計する数字がどのセルに書かれているかを指定していましたが、今度はプログラム実行時に「ここから縦に3つのセル」と指定するプログラムを書きましょう。先ほどのプログラムから
     cells(3,3).select
    を削除します。するとプログラム実行前にマウスで選択したセルから縦に3つのセルを合計します。

  4. データの個数を数えましょう

    となっていたらデータは5個ですね。これを数えるために、Do Until文を使います。使い方は
    Do Until 条件
     繰り返す部分
    Loop
    で、条件が成立するまで(until)繰り返します。今回はcells(1,1)から初めてcells(2,1),cells(3,1),...の順番に、セルが空欄になるまで繰り返し下方向を調べるので
     i=1
     do until cells(i,1)=""
       i=i+1
     loop
    このように書きます。

    Sub 練習()
     i=1
     do until cells(i,1)=""
       i=i+1
     loop
     cells(i,1)="データの個数"
     cells(i,2)=i

    End Sub
    この方法でちゃんと数えられましたか?もし数えた結果が違うのでしたら、何故違うのか考えてみてください。

0 件のコメント: