...

情報・マクロのつくりかた講座 例.全ての評点を5段階評価にして評点の

by user

on
Category: Documents
3

views

Report

Comments

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)に代入
マクロ終了
Fly UP