Comments
Description
Transcript
情報・マクロのつくりかた講座 例.全ての評点を5段階評価にして評点の
情報・マクロのつくりかた講座 例.全ての評点を5段階評価にして評点の右隣のセルに書き込み、評価で「1」がついたものの評点および評価を赤字にす るプログラムを書きなさい。 ☆コンピューターにできるのは、基本的に特定の場所にあるデータの読み込み【入力】、データの変換・処理やその繰り 返し【演算】、データを特定の場所へ書き出し【出力】のみなので、これを上手く組み合わせてプログラムを作る。 ①まずはすべきことを日本語で考える この場合なら、 セルの読み込み→読み込んだ評点データの場合分けによる評価への変換→変換結果である評価をセルに書き出し と セルの読み込み→読み込んだ評価データの場合分けによる色変更処理・書き出し が必要。 ②次に1個例を挙げて簡単なところから考えてみる。 この場合なら A3セルの読み込み→もしデータが 40∼49 なら 2、50∼64 なら 3、……というふうに場合分けして評価を決める→評 価をB3セルに書き出す と 評価が 1 だったら色を赤にする(評価は同じマクロ内でならすでに読み込んであるのでもう一回読み込む必要ナシ) Sub Macro1 () a = Cells(3, 1).Value Select Case a Case 40 To 49 b =2 Case 50 To 64 b =3 Case 65 To 79 b =4 Case 80 To 100 b =5 Case Else b =1 End Select Cells(3, 2).Value = b If b = 1 Then Cells(3, 1).Font.ColorIndex = 3 Cells(3, 2).Font.ColorIndex = 3 End If End Sub マクロ 1 を開始します、という宣言 セル(3, 1)の値を a に代入 a の場合分け開始 a が 40∼49 のとき 2 を b に代入 a が 50∼64 のとき 3 を b に代入 a が 65∼79 のとき 4 を b に代入 a が 80∼100 のとき 5 を b に代入 a がそれ以外のとき 1 を b に代入 a の場合分け終了 b をセル(3, 2)の値に代入 b の場合分け開始、もし b が 1 なら 3(赤)を(3, 1)セルのフォント情報の色一覧という項目に代入 3(赤)を(3, 2)セルのフォント情報の色一覧という項目に代入 b の場合分け終了 マクロ 1 を終了します、という宣言 ※このぐらいまでは基本文法だから覚え込んじゃうしかナイ。 ☆コツとしては、Sub Macro ()∼End Sub や Select Case∼End Select、If…Then∼End If などのように対になって いる決まり文句を先に書いてから中身をごちゃごちゃ書いていった方が構造的には間違えにくい。 ③だんだん順を追って応用させていく。 まずは縦列がどこまで続くか分からないという前提で繰り返し処理。 Sub Macro1 () x =3 Do a = Cells(x , 1).Value If a = " " Then Exit Do Select Case a Case 40 To 49 b =2 Case 50 To 64 b =3 Case 65 To 79 b =4 Case 80 To 100 b =5 Case Else b =1 End Select Cells(x, 2).Value = b If b = 1 Then Cells(x , 1).Font.ColorIndex = 3 Cells(x , 2).Font.ColorIndex = 3 End If x =x +1 Loop Until a = " " End Sub マクロ 1 を開始します、という宣言 3 を x に代入 繰り返し処理のスタート地点 セル(x , 1)の値を a に代入…最初は(3, 1) もしここで a が「 」(空白)ならその時点で Do を終了する a の場合分け開始 a が 40∼49 のとき 2 を b に代入 a が 50∼64 のとき 3 を b に代入 a が 65∼79 のとき 4 を b に代入 a が 80∼100 のとき 5 を b に代入 a がそれ以外のとき 1 を b に代入 a の場合分け終了 b をセル(x, 2)の値に代入 b の場合分け開始、もし b が 1 なら 3(赤)を(x , 1)セルのフォント情報の色一覧という項目に代入 3(赤)を(x , 2)セルのフォント情報の色一覧という項目に代入 b の場合分け終了 x の値+1 を新しい x に代入 a が「 」(空白)になるまで Do にもどってループする(繰り返す) マクロ 1 を終了します、という宣言 次に横列がある程度どこまで続くか分かっているという前提で繰り返し処理。 Sub Macro1 () For y = 1 To 7 Step 2 x =3 Do a = Cells(x , y ).Value If a = " " Then Exit Do Select Case a Case 40 To 49 b =2 Case 50 To 64 b =3 Case 65 To 79 b =4 Case 80 To 100 b =5 Case Else b =1 End Select Cells(x, y+1 ).Value = b If b = 1 Then Cells(x , y ).Font.ColorIndex = 3 Cells(x , y+1 ).Font.ColorIndex = 3 End If x =x +1 Loop Until a = " " Next y End Sub マクロ 1 を開始します、という宣言 繰り返し処理:1 から 2 ずつ足していって 7 までそれぞれ y に代入 3 を x に代入 繰り返し処理のスタート地点 セル(x, y)の値を a に代入…最初は(3, 1) もしここで a が「 」(空白)ならその時点で Do を終了する a の場合分け開始 a が 40∼49 のとき 2 を b に代入 a が 50∼64 のとき 3 を b に代入 a が 65∼79 のとき 4 を b に代入 a が 80∼100 のとき 5 を b に代入 a がそれ以外のとき 1 を b に代入 a の場合分け終了 b をセル(x, y+1)の値に代入[(x, y)の右隣] b の場合分け開始、もし b が 1 なら 3(赤)を(x, y)セルのフォント情報の色一覧という項目に代入 3(赤)を(x, y+1)セルのフォント情報の色一覧という項目に代入 b の場合分け終了 x の値+1 を新しい x に代入 a が「 」(空白)になるまで Do にもどってループする(繰り返す) 次の y にして y が 7 になるまで For にもどってループする(繰り返す) マクロ 1 を終了します、という宣言 ☆これも、x = ○、Do、x = x + △、Loop Until…や、For y = ○ To △ Step □、Next y のような決まり文句を先に 書くとイイ。 ④完成!の前にマクロの流れを追って、ちゃんと考えたとおりのマクロができたかどうか確認する。 ☆実は、左側のようにマクロが書けるようになることよりも、右側のようにマクロを読んで何をしているのかということ が分かるようになることの方が重要!これができないと、バグが起こったときにどこでどう間違っているのかが判断でき ないから…。読み取るときは「=」が代入なのか等号なのかの区別に注意!! 補足・課題解析 情7 Sub Macro2() Hyouten = Cells(1, 1).Value 'Hyouten は 0 以上 100 以下とする。 If Hyouten >= 80 Then Hyouka = "優" Else If Hyouka >= 70 Then Hyouka = "良" Else If Hyouka >= 60 Then Hyouka = "可" Else Hyouka = "不可" End If End If End If Cells(1, 2).Value = Hyouka End Sub マクロ開始 セル(1, 1)の値を Hyouten に代入 ※「'」を打つとその列はそれ以降メモとなり、書かれていないのと同じ扱いに。 仮定 1:もし Hyouten が 80 以上の場合 「優」という文字列を Hyouka に代入 そうでない場合(Hyouten が 80 未満) 仮定 2:もし Hyouten が 70 以上(かつ 80 未満)の場合 「良」という文字列を Hyouka に代入 そうでない場合(Hyouten が 80 未満かつ 70 未満) 仮定 3:もし Hyouten が 60 以上(かつ 80 未満かつ 70 未満)の場合 「可」という文字列を Hyouka に代入 そうでない場合(Hyouten が 80 未満かつ 70 未満かつ 60 未満) 「不可」という文字列を Hyouka に代入 仮定 3 終了 仮定 2 終了 仮定 1 終了 Hyouka をセル(1, 2)の値に代入 マクロ終了 Sub Macro2() Hyouten = Cells(1, 1).Value 'Hyouten は 0 以上 100 以下とする。 Select Case Hyouten Case 80 To 100 Hyouka = "優" Case 70 To 79 Hyouka = "良" Case 60 To 69 Hyouka = "可" Case Else Hyouka = "不可" End Select Cells(1, 2).Value = Hyouka End Sub マクロ開始 セル(1, 1)の値を Hyouten に代入 ※メモ。 場合分け:Hyouten Hyouten が 80 以上 100 以下の場合 「優」という文字列を Hyouka に代入 Hyouten が 70 以上 79 以下の場合 「良」という文字列を Hyouka に代入 Hyouten が 60 以上 69 以下の場合 「可」という文字列を Hyouka に代入 それ以外の場合(Hyouka が 59 以下または 101 以上) 「不可」という文字列を Hyouka に代入 場合分け終了 Hyouka をセル(1, 2)の値に代入 マクロ終了 情8 Sub Macro1() i=1 Do Cells(i, 1).Value = i ^ 2 i=i+1 Loop While i <= 10 End Sub マクロ開始 1 を i に代入 繰り返し処理のスタート i の 2 乗をセル(I, 1)の値に代入 i に 1 を足して新しい i に代入する i が 10 以下の間ループを続ける マクロ終了 Sub Macro2() n = Cells(1, 1).Value For i = 1 To n Cells(i, 2).Value = Sqr(i) Next I End Sub マクロ開始 セル(1, 1)の値を n に代入 繰り返し処理:1 から 1 ずつ足していって n までそれぞれ y に代入 i の平方根をセル(I, 2)の値に代入 次の i にして i が n になるまで For にもどってループする マクロ終了 Sub Macro3() For i = 1 To 9 For j = 1 To 9 x=i*j Cells(i, j) = x Next j Next I End Sub マクロ開始 繰り返し処理 1:1 から 1 ずつ足していって 9 までそれぞれ i に代入 繰り返し処理 2:1 から 1 ずつ足していって 9 までそれぞれ j に代入 I j を x に代入 x をセル(I, j)に代入 次の j にして j が 9 になるまで For j にもどってループする 次の i にして i が 9 になるまで For i にもどってループする マクロ終了 Sub Macro4() For i = 1 To 3 For j = 1 To 4 Cells(i, j) = i * 10 + j Next j Next I End Sub マクロ開始 繰り返し処理 1:1 から 1 ずつ足していって 3 までそれぞれ i に代入 繰り返し処理 2:1 から 1 ずつ足していって 4 までそれぞれ j に代入 i 10 + j をセル(I, j)に代入 次の j にして j が 4 になるまで For j にもどってループする 次の i にして i が 3 になるまで For i にもどってループする マクロ終了 Sub Macro5( Sum = 0 i=1 Do x = Cells(i, 1) If x <> "" Then Sum = Sum + x i=i+1 End If Loop Until x = "" Cells(i, 1) = "S=" Cells(i, 2) = Sum End Sub マクロ開始 0 を Sum に代入 1 を i に代入 繰り返し処理のスタート セル(I, 1)を x に代入 仮定:もし x が「 」(空白)でない場合 Sum に x の値を足したものを新しい Sum にする i に 1 を足したものを新しい i に代入 仮定終了 x が空白になるまでループを続ける 文字列「S=」を最初に現れた空白のセル(I, 1)に代入 Sum の最終結果を「S=」の右隣のセル(I,2)に代入 マクロ終了