2007-10-24

データの合計

  1. 前回の解答
    プログラムを実行してみたら,データの個数より1多くなった筈です。
    ループが終わった時点で,iの値は最後のセルの番号ではなくて,その次の,最初の空白のセルの番号になっていますので,1を引く必要があります。

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

  2. 先週のプログラムはDo whileというのを使って書くことも出来ます。

    Do While 条件
     繰り返す部分
    Loop

    で、条件が成立している間(while)繰り返します。今回は空欄で無い間繰り返すのですから、等しくないを示す<> ""を使って

    Sub 練習()
     i=1
     do while cells(i,1) <> ""
       i=i+1
     loop
     n=i-1
     cells(n+1,1)="データの個数"
     cells(n+1,2)=n
    End Sub

    と書きます。

  3. ループのまとめ
    1. Do While 条件
        プログラム
      Loop
      最初に条件を判断し、条件が満たされている間(While)、Loopまでのプログラムを実行します。
    2. Do
        プログラム
      Loop While 条件
      まずプログラムを実行します。 その後条件が満たされている間(While)、Doに戻ってプログラムを実行します。
    3. Do Until 条件
        プログラム
      Loop
      最初に条件を判断し、条件が満たされるまで(Until)、Loopまでのプログラムを実行します。
    4. Do
        プログラム
      Loop Until 条件
      まずプログラムを実行します。 その後条件が満たされるまで(Until)、Doに戻ってプログラムを実行します。

  4. さてデータの数を数えたので、前回作ったプログラムを使ってデータの和を求めましょう。 ここで問題になるのが、Dim文はプログラムの先頭、sub のすぐ後に書かなければならないという決まりがあるのです。つまり上のプログラムでnを求めた後で Dim x(n)と書いたのではエラーになります。 この場合、配列の個数を後で変更出来るようにします。プログラムの大凡の流れは次のようになります。

    Sub 練習()
    dim x() as single,...使う変数の型を宣言します。
     前回の後半のプログラムでデータの個数を数えてnに代入するプログラムをここに書きます。
    redim x(n)
     前回の前半のプログラムを使って、データを配列xへ代入し、和を求めるプログラムをここに書きます。
    End Sub

    この講義では今後このように、この部分で何をすれば良いか、を言葉で書きますので、それまでに習ったことを思い出してプログラムを書いてください。

    配列の使い方のまとめ

    • プログラムの先頭のSubの次の行に
      Dim x(100)
      と書くと,x(0),x(1)からx(100)までを使うことができます。
    • プログラムの先頭のSubの次の行に
      Dim x( )
      と書くと,xという配列を使う用意はしましたが,実際に何個目まで使うかはまだ決まっていませんので,実際に使う前に
      ReDim x(100)
      とか
      n=100
      ReDim x(n)
      のように,実際に使う個数を用意します。

  5. 今回作ったプログラムをもう一度実行すると、今度は6番目のセルまで空欄で無いので、データは6個だと誤解して、6番目の"データの個数"も足そうとしてエラーになります。従って、プログラムを「セルが空欄でなく、かつ数字」の間だけ繰り返すように修正しましょう。二つの条件が同時に成立することは And を使って表します。

    Sub 練習()
     i=1
     do while cells(i,1) <> "" And IsNumeric(Cells(i, 1))
       i=i+1
     loop
     n=i-1
     cells(n+1,1)="データの個数"
     cells(n+1,2)=n
    足し算の部分は先ほどと同じ
    End Sub

    のように書きます。二つの条件の片方が成立すれば良いときには Or を使います。

0 件のコメント: