プログラミング(3)「配列」からデータを取り出す
|
目次
http://kg-update.net/pgbegginner_array1/
今回は前回のデータを利用して表示処理させたいと思います。
(1)作成する画面のイメージ
上のような画面を作成し、普通の変数を使用する場合と配列を使用する場合とを比較してみます。
データを格納するタイミングもわかりやすいように「データを格納する」「表示する」のボタン2つを配置します。
「データを格納する」ボタンが押されたときは、データを格納し確認メッセージを表示します。
出席番号を入力し「表示する」ボタンが押されたときには、データから名前・点数を取り出して表示します。該当する出席番号データがない場合は名前に「***」を表示します。
スポンサードリンク
(2)普通の変数で処理させる場合のソース
Option Explicit Dim Name1 As String, Name2 As String, Name3 As String, Name4 As String, Name5 As String Dim Score1 As Integer, Score2 As Integer, Score3 As Integer, Score4 As Integer, Score5 As Integer '--------------------------------------- ' 「格納する」ボタンを押されたとき ' データを格納・配列を使用しない '--------------------------------------- Sub InputButton_Click() Name1 = Cells(3, 2): Score1 = Cells(3, 3) Name2 = Cells(4, 2): Score2 = Cells(4, 3) Name3 = Cells(5, 2): Score3 = Cells(5, 3) Name4 = Cells(6, 2): Score4 = Cells(6, 3) Name5 = Cells(7, 2): Score5 = Cells(7, 3) MsgBox ("データを格納しました") End Sub '--------------------------------------- ' 「表示する」ボタンを押されたとき ' データを引出し・配列を使用しない '--------------------------------------- Sub DispButton_Click() Dim DispName As String, DispScore As Integer Dim StNo As Integer StNo = Val(Range("F2")) Select Case StNo Case 1 DispName = Name1: DispScore = Score1 Case 2 DispName = Name2: DispScore = Score2 Case 3 DispName = Name3: DispScore = Score3 Case 4 DispName = Name4: DispScore = Score4 Case 5 DispName = Name5: DispScore = Score5 Case Else DispName = "***": DispScore = 0 End Select Range("F7") = DispName: Range("F8") = DispScore End Sub
(3)配列で処理させる場合のソース
Option Explicit Dim StName(1 To 5) As String Dim Score(1 To 5) As Integer '--------------------------------------- ' 「格納する」ボタンを押されたとき ' データを格納・配列を使用する '--------------------------------------- Sub InputButton2_Click() Dim StNo As Integer For StNo = LBound(StName) To UBound(StName) '配列の最小値~最大値まで繰り返し StName(StNo) = Cells(StNo + 2, 2) '名前を格納 Score(StNo) = Cells(StNo + 2, 3) '点数を格納 Next StNo MsgBox ("配列を使って、データを格納しました") End Sub '--------------------------------------- ' 「表示する」ボタンを押されたとき ' データを引出し・配列を使用する '--------------------------------------- Sub DispButton2_Click() Dim DispName As String, DispScore As Integer Dim StNo As Integer StNo = Val(Range("F2")) If (StNo >= LBound(StName)) And (StNo <= UBound(StName)) Then DispName = StName(StNo): DispScore = Score(StNo) Else DispName = "***": DispScore = 0 End If 'わかりやすいように「配列」を追加表示させる Range("F7") = DispName & "(配列)": Range("F8") = DispScore & "(配列)" End Sub同じようなソースを繰り返し書かずにすみますね。「出席番号3の生徒のデータ」と言われたときにすぐに取り出せるのが理解いただけたでしょうか。
余計なコードを書かないことはバグ防止のためにも大切だと思います。
VBAの場合、指定なく配列を作成すると自動的にインデックス(上の例では1~5を指定しています)が0から始まります。今回は配列の引出しのイメージをわかっていただきたかったので、あえて明示的に1~5を指定しました。
スポンサードリンク
コメントを書き込む