1. TOP
  2. Excel
  3. プログラミング(3)「配列」からデータを取り出す

プログラミング(3)「配列」からデータを取り出す

前回は、配列にデータを格納するお話について書きました。
https://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を指定しました。
 
「ExcelVBAに関する書籍」を
「プログラミングに関する書籍」

スポンサードリンク

コメントを書き込む

入力エリアすべてが必須項目です。メールアドレスが公開されることはありません。

内容をご確認の上、送信してください。