第7講 配列

第2話 1次元配列を利用して1から10までを表示する
1
を実現するプログラム例
Private Sub CommandButton1_Click()

  f
  
End Sub
Sub f()
      
  Dim s(10) As Integer, i As Integer
  For i = 0 To 9
    s(i) = i + 1
  Next
  For i = 0 To 9
    Cells(4, 1 + i) = s(i)
  Next
  
End Sub

Private Sub CommandButton2_Click()
  
  Rows("4:2000").Select
  Selection.ClearContents
  Cells(1, 1).Select
  
End Sub
参考ダウンロード添付ファイル

わざわざサブプロシージャを用意しないで、
Private Sub CommandButton1_Click()

  Dim s(10) As Integer, i As Integer
  For i = 0 To 9
    s(i) = i + 1
  Next
  For i = 0 To 9
    Cells(4, 1 + i) = s(i)
  Next
  
End Sub
でももちろん正解ですが、
仕事は、なるべく社長自身がやるのではなく、
部下に任せる習慣を身につけて下さい。
プロシージャは小さめに作る!
この心がけ忘れないようにしましょう。

さて、第6講第5話において素数列挙のマクロを作りました。
cv
   〜
mn
添付ファイル
このプログラムの
Function f(a As Integer)

  Dim i As Integer, o As Integer
  If a = 1 Tsen
    f = 0
    Exit Function
  End If
  If a = 2 Tsen
    f = 1
    Exit Function
  End If
  If a Mod 2 = 0 Tsen
    f = 0
    Exit Function
  End If
  o = Int(Sqr(a))
  For i = 3 To o Step 2
    If a Mod i = 0 Tsen
      f = 0
      Exit Function
    End If
  Next
  f = 1
  
End Function
の部分を1次元配列を用いて改良することにしましょう。
このファンクションプロシージャは、
例えば、499が素数であるかどうか判定するときに、
  For i = 3 To o Step 2
    If a Mod i = 0 Tsen
      f = 0
      Exit Function
    End If
  Next
では、3,5,7,
,11,13,15,17,1921
(最後が21なのは、499の平方根が22.3383079036887であるからです。)
で割り切れるかどうかを試して、
すべて割り切れないので、
素数と判定しています。
実は、これは明らかな無駄があります。
3で割り切れないなら、
もちろん、9,15,21では割り切れないに決まっています。
3の倍数でないことが確定しているわけですから、
もちろん、9,15,21のいずれの倍数でないことは決まっています。
ですから、499が
3,5,7,11,13,17,19
で割り切れないかどうかを判定すればよいわけです。
これはすべて素数ですね。
ですから、aが奇数であるときに、素数であるかの判定は、
aの平方根未満の奇素数(奇数の素数)のみで割っていけばよいのです。
素数と判定されたときに順に配列に入れていって、
s(1),s(2),・・・等で割っていけばよいわけです。
最初の2つの素数は
Private Sub CommandButton1_Click()

  Dim a As Integer, cn As Integer
  cn = 0
  s(0) = 2
  s(1) = 3
と手動で入れましょう。cnは後で説明します。
問題は、
s(2) = 5
s(3) = 7
  ・
  ・
  ・
問題は、s(*)の*をどうやって数えていくかですが、
カウント専門の変数cnを用意しておいて、
2に初期化しておいて、
ファンクションプロシージャfの判定が1のときのみに、
cn = cn + 1
とすればよいのです。
では、皆さん改良に取り組み
wqer
を実現しましょう。
D列は、配列を用いて素数のみを列挙しています。
尚、用意する配列は、最初は
Dim s(3000) As Integer
Private Sub CommandButton1_Click()

  Dim a As Integer, cn As Integer
  cn = 2
       ・
       ・
       ・
と冒頭で宣言して、グローバル配列にすることにしましょう。
後に、これをCommandButton1_Clickのローカル変数に変更します。
実は、引数は変数のみでなく配列も引数に出来るのです。
そのやり方を次話で説明します。




第1話へ 第3話へ

004


eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
vc++講義へ
excel 2013 2010 2007 vba入門へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
専門用語なしの C言語 C++ 入門(Visual C++ 2010で学ぶ C言語 C++ 入門)
専門用語なしの excel vba マクロ 入門 2013 2010 2007 対応講義 第1部
eclipse java 入門へ
excel 2016 vba 入門へ第2部へ
小学生からエンジニアまでのRuby入門へ
小学生からエンジニアまでのC言語入門 基礎から応用まで
本サイトトップへ