情報基礎 A 第 10 週 プログラミング入門 マクロ基本文法 4 1 配列 FOR~NEXT 全眞嬉 東北大学情報科学研究科システム情報科学専攻情報システム評価学分野 http://www.dais.is.tohoku.ac.jp/~jinhee/jyoho-19.html
6 人分の合計を計算 2 socre(0) socre(1) socre(2) socre(3) socre(4) socre(5) i=0, sum=0 sum i i=i+1 i=0 の時 sum =sum+score(0) i<=5 sum=sum+score(i)
6 人分の合計を計算 初期値 : 0 i 0 sum 100 65 76 87 61 99 socre(0) socre(1) socre(2) socre(3) socre(4) socre(5) 1 回目 0 sum + 100 100 score(0) sum 1 i 2 回目 100 sum + 65 165 score(1) sum 2 i
6 人分の合計を計算 4 3 回目 165 sum + 76 241 score(2) sum 3 i 6 回目 389 sum + 99 488 score(5) sum 6 i
5 Sub keisan() For ~ Next を使い 6 人分の点数の合計 平均を計算 配列名 :score5 カウンタ名 :i 合計の変数 :sum1 Dim score5(5) As Integer Dim i As Integer Dim sum1 As Integer sum1 = 0 score5(0) = 100 score5(1) = 65 score5(2) = 76 score5(3) = 87 score5(4) = 61 score5(5) = 99 For i = 0 To 5 step 1 sum1 = sum1 + score5(i) Next i MsgBox ( i & 人の点数合計は & sum1 & 点です. ) MsgBox ( 平均は & sum1 / i & 点です. )
演習 6 hairetsu4() のプラグラムを拡張し点数の合否の判定も出力するプログラムを作成してください プログラム名 hyouka() 実行例 学籍番号 1 番田中浩二さんの点数は 100 点で合格です. 学籍番号順に表示する (6 人分 ) MsgBox が 6 回実行される. 合否の基準 80 点以上は 合格 80 点未満は 不合格 ヒント hairetsu4() の For~Next 文と seiseki1() の If ~Then ~Else 文を応用 For~Next 文の中に If ~Then ~Else 文を入れる
7 2 次元配列 Excel データ利用
x(1) x(2) x(3) x(4) x(5) x(6) x(7) x(8) x(9) x(0) y(1) y(2) y(3) y(4) y(5) y(6) y(7) y(8) y(9) y(0) z(1) z(2) z(3) z(4) z(5) z(6) z(7) z(8) z(9) z(0) a(1,1) a(1,2) a(1,0) a(2,1) a(2,2) a(2,0) a(3,1) a(3,2) a(3,0) a(4,1) a(4,2) a(4,0) a(5,1) a(5,2) a(5,0) a(6,1) a(6,2) a(6,0) a(7,1) a(7,2) a(7,0) a(8,1) a(8,2) a(8,0) a(9,1) a(9,2) a(9,0) a(0,1) a(0,2) a(0,0) 配列 (1 次元 2 次元 ) 8 x(1) x(2) x(3) x(4) x(5) x(6) x(7) x(8) x(9) x(0) y(1) y(2) y(3) y(4) y(5) y(6) y(7) y(8) y(9) y(0) z(1) z(2) z(3) z(4) z(5) z(6) z(7) z(8) z(9) z(0) 整数配列 x(9) 整数配列 y(9) 整数配列 z(9) 整数 2 次元配列 a(9,2) x(9) y(9) z(9)
2 次元配列 ( 一般的な方法 ) 9 配列名 ( 行のインデックスの最大値, 列のインデックスの最大値 ) a(0,0) a(1,0) a(2,0) a(3,0) a(0,1) a(1,1) a(2,1) a(3,1) a(0,2) a(1,2) a(2,2) a(3,2) 10 行 3 列の 2 次元配列配列の名前 a 箱の数 (10 3=30 個 ) a(9,2): 名前が a の整数型の箱を 30 個用意 a(4,0) a(5,0) a(4,1) a(5,1) a(4,2) a(5,2) Dim a (9,2) As Integer a(6,0) a(7,0) a(8,0) a(6,1) a(7,1) a(8,1) a(6,2) a(7,2) a(8,2) 配列名 インデックス番号の最大値 データ型 a(9,0) a(9,1) a(9,2)
2 次元配列 ( インデックス番号指定 ) 10 配列名 ( 行のインデックス番号指定, 列のインデックス番号指定 ) a(1,1) a(1,2) a(1,3) a(2,1) a(2,2) a(2,3) a(3,1) a(3,2) a(3,3) a(4,1) a(4,2) a(4,3) 10 行 3 列の 2 次元配列配列の名前 a 箱の数 (10 3=30 個 ) a(5,1) a(5,2) a(5,3) a(6,1) a(6,2) a(6,3) a(7,1) a(7,2) a(7,3) Dim a (1 to 10, 1 to 3) As Integer a(8,1) a(8,2) a(8,3) a(9,1) a(9,2) a(9,3) 配列名 インデックス指定 データ型 a(10,1) a(10,2) a(10,3)
エクセルデータ利用 11 cells( 行のインデックス, 列のインデックス ) A1 B1 C1 A2 B2 C2 A3 B3 C3 A4 B4 C4 A5 B5 C5 A6 B6 C6 A7 B7 C7 A8 B8 C8 A9 B9 C9 A10 B10 C10 エクセルのセルの行と列の番号は 1 から始まる cells(1,1) cells(1,2) cells(1,3) cells(2,1) cells(2,2) cells(2,3) cells(3,1) cells(3,2) cells(3,3) cells(4,1) cells(4,2) cells(4,3) cells(5,1) cells(5,2) cells(5,3) cells(6,1) cells(6,2) cells(6,3) cells(7,1) cells(7,2) cells(7,3) cells(8,1) cells(8,2) cells(8,3) cells(9,1) cells(9,2) cells(9,3) cells(10,1) cells(10,2) cells(10,3)
エクセル上のセル書式 12 セル番号 :C2 VBA では Range( C2 ) 又は Cells(2,3) Range ( 列番号行番号 ) Cells( 行番号, 列番号 )
13 プロシージャ Sub から までのコードの集まりが 1 つのプロシージャ ( マクロ ) Sub exercise1() ThisWorkbook.Worksheets("Sheet1").Range("A:A").Value = 1 Sub exercise2() ThisWorkbook.Worksheets("Sheet1").Range("A:A").Interior.ColorIndex = 4 Sub exercise3() ThisWorkbook.Worksheets("Sheet1").Range("A:A"). Delete
14 オブジェクト もの 対象 の意味 VBA では操作対象となるものをオブジェクトと呼ぶ このブックのワークシート Sheet1 のセルの範囲 A 列 ThisWorkbook. Worksheets("Sheet1"). Range("A:A"). Interior.ColorIndex = 4 ThisWorkbook. Worksheets("Sheet1"). Range("A:A") K. Delete ThisWorkbook. Worksheets("Sheet1"). Range("A:A"). Value = 1 オブジェクト オブジェクトどうしを結ぶピリオド
メソッド 15 オブジェクトが操作する Delete Open などの言葉をまとめてメソッドと呼ぶ このブックのワークシート Sheet1 のセルの範囲 A 列を削除する ThisWorkbook. Worksheets("Sheet1") K. Range("A:A"). Delete メソッド オブジェクトとメソッド結ぶピリオド
16 プロパティ 属性 の意味 オブジェクトの後ろにつなげてオブジェクトの外観を設定 このブックのワークシート Sheet1 のセルの範囲 A 列の塗りつぶしを ( 色 ) 設定する赤 ThisWorkbook. Worksheets( Sheet1 ). Range( A:A ) K. Interior. ColorIndex = 3 代入 プロパティ オブジェクトとプロパティを結ぶピリオド
セルの参照方法 17 セルの参照方法 Range Cells セル A1 の値 10 に設定 以下はまったく同じ動作をする Sub Example_Range1() ActiveSheet.Range( A1 ).Value = 10 Sub Examlpe_Cells1() ActiveSheet.Cells(1, 1).Value = 10
Range プロパティ 18 任意の1つのセル, 又はセルの範囲を参照するプロパティ 値の読み出し 設定などを行う Sub Example_Range2() セルに値を入れる Sub Example_Range2() セルに値を入れる Range( A1 ) = 15 Range( セル ) Range( A2 ) = 5 Range( B1:B10 )=10 ActiveSheet.Range( A1 ).Value = 15 ActiveSheet.Range( A2 ).Value = 5 ActiveSheet.Range( B1:B10 ).Value=10
Cells プロパティ 19 単体セルを参照する Cells(RowIndex,ColIndex) Sub Example_Cells2() セルに値を入れる ActiveSheet.Cells(1,5).Value = 25 ActiveSheet.Cells(2,5).Value = 5 ActiveSheet Value は省略可能 Sub Example_Cells2() セルに値を入れる Cells(1,5) = 25 Cells(2,5) = 5
20 Cells プロパティ セル F1~F100 にセルの行番号を書き込むプログラム Sub Example_Cells3() セル F1~F100 にセルの行番号を書き込むプログラム Dim i As Integer For i = 1 to 100 step 1 Cells( i, 6 ) = i Next i