情報基礎Ａ 第11週
VBA基礎文法５
VBAプログラミング
成績データ処理

全眞嬉東北大学情報科学研究科
システム情報科学専攻
情報システム評価学分野
http://www.dais.is.tohoku.ac.jp/~jinhee/jyoho-15.html

1

セルB1からB10までの平均

Sheet1• Example_Cells5()のプログラムに平均を追加して下さい– B1からB10までの平均をB12に出力
Sub Example_Cells5()‘カウンター : cnt

Dim i As Integer
Dim goukei1 As Integer
Dim cnt As Integercnt = 0
goukei1 = 0
For i = 1 to 10
goukei1 = goukei1 + Cells(i, 2)
cnt = cnt + 1
Next iCells( i , 2 ) = goukei1Cells( i+1 , 2 ) = goukei1/cnt
End Sub22

For ～ Next 文
行番号を書くプログラム（A1～A10 に行番号）

Sheet2
列番号を書くプログラム（A1～J1に列番号）

Sub gyou()
Dim i As Integer
Worksheets("Sheet2").Activate

Sub retsu()
Dim j As Integer
Worksheets("Sheet2").Activate

For i = 1 to 10 step 1cells( i , 1 ) = i
Next i

For j = 1 to 10 step 1cells( 1 , j ) = j
Next jEnd subEnd sub3

2重ループ：For文を入れ子構造で使用
1行～10行, A～J列までセルに「行番号＊列番号」の計算結果をを”Sheet2”に出力するプログラム

Sheet2Sub dual()
Dim i As Integer
行:i
列:j
Dim j As integer
Worksheets("Sheet2").Activate
For i = 1 to 10 step 1
For j = 1 to 10 step 1
cells(i, j) = i * j
Next jNext iEnd sub4

VBAプログラミング
成績データ処理5

6科目100人分のデータ処理• 「成績データ2」をダウンロードして下さい– ファイル名：data2.xlsm– http://www.dais.is.tohoku.ac.jp/~jinhee/jyoho-15.html– データの項目• 学籍番号、国語、英語、数学、歴史，公民，理科– 100人の成績（番号は1001～1100）• 準備– ダウロードしたdata2.xlsmファイルのVisual Basic Editorを開き標準モジュールを挿入して下さい– 作業は標準モジュールのModule1
6

科目別成績の合計と平均7

For ～ Next 文
列:j

行:i

行の制御

Cells(行番号，列番号)
Cells(i , 列番号)

行番号を変数（ i ）にして制御する

列の制御

Cells(行番号，列番号)
Cells(行番号, j)

列番号を変数( j )にして制御する

例1．行番号を書くプログラム（A1～A10 に行番号）

例2.列番号を書くプログラム（A1～J1に列番号）

For i = 1 to 10 step 1cells( i , 1 ) = i
Next i

For j = 1 to 10 step 1cells( 1 , j ) = j
Next j
8

行の制御
1科目

国語の合計と平均100名の国語の成績合計

１００人の成績

繰り返し制御するデータの範囲
セルB3～セルB102
B列の3行から102行までの100個のセル

data2.xlsm
行 : i シート：成績

Sub goukei_kokugo()
Dim i As Integer
Dim sum1 As Integer
Worksheets(“成績”).Activatesum1 = 0For i = 3 To 102 step 1sum1 = sum1 + Cells( i , 2 )Next i

セルB103に合計
セルB104に平均を表示
セル番号は変数iを利用‘合計 セルB103
Cells( i , 2 ) = sum1
‘平均 セルB104
Cells( i + 1 , 2) = sum1 / 100
End Sub

9

各科目別合計と平均科目ことに6つのプログラムを書けば6科目の合計と平均を求められますが，一つのプログラムに2重ループを使って６各科目の合計と平均を求めるプログラムを作って下さい．

data2.xlsm
シート：成績

国語

Sub goukei_kokugo()
Dim i As Integer
Dim sum As Integer
Worksheets(“成績”).Activate
sum = 0For i = 3 To 102 step 1
sum = sum + Cells( i , 2 )Next iCells( i , 2 ) = sumCells( i + 1 , 2) = sum / 100
End Sub

英語Sub goukei_eigo()
Dim i As Integer
Dim sum As Integer
Worksheets(“成績”).Activate
sum = 0For i = 3 To 102 step 1
sum = sum + Cells( i , 3 )Next iCells( i , 3 ) = sumCells( i + 1 , 3) = sum / 100
End Sub

数学Sub goukei_suugaku()
Dim i As Integer
Dim sum As Integer
Worksheets(“成績”).Activate
sum = 0For i = 3 To 102 step 1
sum = sum + Cells( i , 4 )Next iCells( i , 4 ) = sumCells( i + 1 , 4) = sum / 100
End Sub歴史Sub goukei_rekisi()
Dim i As Integer
Dim sum As Integer
Worksheets(“成績”).Activatesum = 0
For i = 3 To 102 step 1
sum = sum + Cells( i , 5 )Next iCells( i , 5 ) = sumCells( i + 1 , 5) = sum / 100
End Sub

公民Sub goukei_koumin()
Dim i As Integer
Dim sum As Integer
Worksheets(“成績”).Activate
sum = 0For i = 3 To 102 step 1
sum = sum + Cells( i , 6 )Next iCells( i , 6 ) = sumCells( i + 1 , 6) = sum / 100
End Sub

理科Sub goukei_rika()Dim i As Integer
Dim sum As Integer
Worksheets(“成績”).Activatesum = 0
For i = 3 To 102 step 1
sum = sum + Cells( i , 7 )Next iCells( i , 7 ) = sumCells( i + 1 , 7) = sum / 100
End Sub

10

For ～ Next 文(2重ループ)
2重ループ

Cells(行番号, 列番号)
Cells( i, j)

行:i

列:j

行番号を変数（ i ）として列番号を変数（ j ）にして制御する
For ~ Next文を2つ入れ子構造で使う．
（繰り返しの中に繰り返しを書く）

For j = 1 to 10 step 1
For i = 1 to 10 step 1cells(i, j) = i * j
Next iNext j

例3．行～10行, A～J列までセルに自分の「行番号＊列番号」を出力するプログラム

For i = 1 to 10 step 1
For j = 1 to 10 step 1cells(i, j) = i * j
Next jNext i

処理結果は同じだが，処理される順序が異なる

11

2重ループ

各科目別合計と平均

data2.xlsm
行:i 列:j

シート：成績

Sub goukei_6kamoku()
合計の変数sum2
Dim i As Integer
を初期化する
Dim j As Integer
場所にご注意Dim sum2 As Integer
Worksheets(“成績”).Activate
１００人の成績For j = 2 To 7

step 1

sum2 = 0
For i = 3 To 102 step 1
sum2 = sum2 + Cells( i , j )Next i‘合計Cells( i , j ) = sum2
‘平均Cells( i + 1 , j) = sum2 / 100
Next j12

End Sub

科目別成績の評価値

13国語の成績評価
学籍番号1001の国語の成績（セルB3）の評価をセルH3に出力する
成績が90点以上なら“秀”、80点以上90点未満は“優”、70点以上80点未満は“良”、60点以上70点未満は“可”, 60点未満は“不可”

If Cells(3, 2) >= 90 ThenCells(3, 8) = "秀"ElseIf Cells(3, 2) >= 80 Then
Cells(3, 8) = "優"ElseIf Cells(3, 2) >= 70 Then
Cells(3, 8) = "良"ElseIf Cells(3, 2) >= 60 ThenCells(3, 8) = "可"ElseCells(3, 8) = "不可"End If

国語の成績評価をH3～H102に出力するプログラム
行番号を変数（ i ）にして制御する14

行の制御

国語の成績評価・学籍番号1001から1100までの国語成績の評価値をセルH3～
H102に出力するプログラム
・評価値の基準
成績が90点以上なら“秀”、80点以上90点未満は“優”、70点以上80点未満は“良”、60点以上70点未満は“可”,60点未満は“不可”

data2.xlsm
シート：成績

Sub hyouka_kokugo()
Dim i As Integer
Worksheets("成績").Activate

行:i

For i = 3 To 102 step 1
If Cells( i , 2 ) >= 90 Then
Cells( i , 8 ) = "秀"ElseIf Cells ( i , 2 ) >= 80 Then
Cells( i , 8 ) = "優"ElseIf Cells ( i , 2 ) >= 70 Then
Cells( i , 8 ) = "良"ElseIf Cells ( i , 2 ) >= 60 ThenCells( i , 8 ) = "可"ElseCells( i , 8 ) = "不可"End IfNext iEnd Sub
15

2重ループ

6科目の成績評価

処理順序：国語1001→1100番，英語1001→1100，・・・，理科1001→1100番 順

一つのプログラムに2重ループを使って６各科目の成績評価値を出力するプログラムを作って下さい．

16

6科目の成績評価 Sub hyouka_6kamoku()
Dim i As Integer
Dim j As Integer
Worksheets("成績").Activate

2重ループ
行:i

列:j

・学籍番号1001から1100までの6科目の成績評価値をセルH3～M102に出力するプログラム
・評価値の基準
成績が90点以上なら“秀”、80点以上90点未満は“優”、70点以上80点未満は“良”、60点以上70点未満は“可”,60点未満は“不可”For j = 2 To 7 step 1
For i = 3 To 102 step 1
If Cells( i , j ) >= 90 ThenCells( i , j + 6 ) = "秀"ElseIf Cells( i , j ) >= 80 ThenCells( i , j + 6 ) = "優"ElseIf Cells( i , j ) >= 70 Then
Cells( i , j + 6 ) = "良"ElseIf Cells( i , j ) >= 60 Then
Cells( i , j + 6 ) = "可"ElseCells( i , j + 6 ) = "不可"End IfNext iNext jEnd Sub

data2.xlsm
シート：成績
行:i
列:j17