Sub 例A_セルへの入力()
Cells(1, 1).Value = "おはよう" 'セルA1に「おはよう」と入力する。
End Sub
なお、上記のプログラム例中の緑字の部分は「コメント」と呼ばれるもので、
プログラムとしては無視される部分である。
プログラム中にアポストロフィー「'」を書くと、そこから右側の文末までがコメントとなる。
コメントは無視されるので、基本的には何を書いてもよい。
そのため、メモを書く機能としてよく使われる。
VBEではコメントが自動的に緑字になるが、この教材ではこれ以降は緑字にしないので「'」を見て判断すること。
Sub 例B_セル値の取得()
MsgBox (Cells(1, 2).Value) 'セルB1の値を取得してメッセージボックスに表示する。
End Sub
セルB1に「はい!」と入力した後でマクロを実行した例:
Sub 例C_セルの塗りつぶし()
Cells(1, 3).Interior.Color = RGB(255, 0, 0) 'セルC1を赤にする。
Cells(2, 3).Interior.Color = RGB( 0,255, 0) 'セルC2を緑にする。
Cells(3, 3).Interior.Color = RGB( 0, 0,255) 'セルC3を青にする。
Cells(4, 3).Interior.Color = RGB( 0, 0, 0) 'セルC4を黒にする。
Cells(5, 3).Interior.Color = RGB(255,255,255) 'セルC5を白にする。
Cells(6, 3).Interior.Color = RGB( 0,255,255) 'セルC6をシアンにする。
Cells(7, 3).Interior.Color = RGB(255, 0,255) 'セルC7をマゼンタにする。
Cells(8, 3).Interior.Color = RGB(255,255, 0) 'セルC8を黄にする。
End Sub
Sub 例D_変数の値をセルに入力()
Moji = "いろは" '変数Mojiに「いろは」を代入する。
Kazu = 12+16-7 '変数Kazuに「12+16-7」の答を代入する。
Cells(1, 4).Value = Moji 'セルD1に変数Mojiの値を入力する。
Cells(2, 4).Value = Kazu 'セルD2に変数Kazuの値を入力する。
End Sub
Sub 例E_変数の値で色を指定()
Aka = Cells(1, 5).Value 'セルE1の値を取得して変数Akaに代入する。
Midori = Cells(2, 5).Value 'セルE2の値を取得して変数Midoriに代入する。
Ao = Cells(3, 5).Value 'セルE3の値を取得して変数Aoに代入する。
Cells(4, 5).Interior.Color = RGB(Aka, 0, 0) 'セルE4を赤色で塗りつぶす
Cells(5, 5).Interior.Color = RGB(0, Midori, 0) 'セルE5を緑色で塗りつぶす
Cells(6, 5).Interior.Color = RGB(0, 0, Ao) 'セルE6を青色で塗りつぶす
Cells(7, 5).Value="合成" 'セルE7に「合成」と入力
Cells(8, 5).Interior.Color = RGB(Aka, Midori, Ao) 'セルE8を合成色で塗りつぶす
End Sub
事前に、セルE1,E3,E5にそれぞれ赤,緑,青の明るさの数値を入力してからマクロを実行する。
【書き方】
For 変数名=初期値 To 終値
繰り返したい処理
Next 変数名
最初、変数に初期値が代入される。
Nextまで来ると変数の値が1だけ増え、Forに戻る。
それを変数の値が終値になるまで繰り返す。
Sub 例F_メッセージボックス繰り返し()
For i = 1 To 3 'i=1から始めて、変数iの値が3になるまで繰り返す。
MsgBox (i) '変数iの値をメッセージボックスに表示する。
Next i '変数iの値を1増やしてForに戻る。
End Sub
↓
↓
Sub 例F_メッセージボックス繰り返し()
x=0
For i = 1 To 10 'i=1から始めて、変数iの値が10になるまで繰り返す。
x=x+i
MsgBox (x) '変数xの値をメッセージボックスに表示する。
Next i '変数iの値を1増やしてForに戻る。
End Sub
↓
↓
:
↓
プログラム中の「x=x+i」は等式ではなく代入を表す書き方である。
右辺の値(x+iの答)を左辺の変数xに代入している。
例えば、最初にこれが実行される時には、xの値は0、iの値は1なので、右辺の値は1となり、これが左辺の変数xに代入される。
すでに値を持っている変数に別の値を代入すると上書きになる。
このプログラムの各段階において、変数xと変数iの値は次の表のようになる。
左辺のx | 右辺のx | i | |
---|---|---|---|
繰り返し処理に入る前 | 0 | ||
繰り返し1回目 | 1 | 0 | 1 |
繰り返し2回目 | 3 | 1 | 2 |
繰り返し3回目 | 6 | 3 | 3 |
繰り返し4回目 | 10 | 6 | 4 |
繰り返し5回目 | 15 | 10 | 5 |
繰り返し6回目 | 21 | 15 | 6 |
繰り返し7回目 | 28 | 21 | 7 |
繰り返し8回目 | 36 | 28 | 8 |
繰り返し9回目 | 45 | 36 | 9 |
繰り返し10回目 | 55 | 45 | 10 |
Sub 例G_ライプニッツ級数()
Pi = 4 '変数Piに初項(i=0)の値を代入する。
For i = 1 To 1000 'i=1から始めて、変数iの値が1000になるまで繰り返す。
Pi = Pi + 4 * (-1) ^ i / (2 * i + 1) '第i-1項までの和に第i項を加える。
Cells(i, 7).Value = Pi '第i項までの和をG列の第i行に入力する。
Next i '変数iの値を1増やしてForに戻る。
End Sub
第1000項まで計算しても小数第2位までしか合っていないことがわかる。ライプニッツ級数は収束が遅い。
【書き方】
If 条件 Then
真の場合の処理
Else
偽の場合の処理
End If
条件は、等号・不等号を使った論理式で表す。
【書き方】
Application.InputBox("メッセージ", Type:=〇)
数値を入力する場合は「Type:=1」、文字を入力する場合は「Type:=2」とする。
Sub 例H_合否判定()
a = Application.InputBox("試験は何点でしたか?", Type:=1) '入力ボックス
If a >= 60 Then '条件分岐開始。もしaが60以上ならば、
MsgBox ("合格です!") 'これを実行する。
Else 'そうでなければ、
MsgBox ("不合格です…") 'これを実行する。
End If '条件分岐終了
End Sub
→
→
【書き方】
If 条件 Then
真の場合の処理
End If
偽の場合には何もしない。
Sub 例I_ライプニッツ級数()
Pi = 4 '変数Piに初項(i=0)の値を代入する。
For i = 1 To 1000000 'i=1から始めて、変数iの値が1000000になるまで繰り返す。
Pi = Pi + 4 * (-1) ^ i / (2 * i + 1) '第i-1項までの和に第i項を加える。
If Int(i / 1000) * 1000 = i Then '条件分岐開始。もしiが1000の倍数ならば、
Cells(i / 1000, 9).Value = Pi '第i項までの和をJ列の第(i/1000)行に入力する。
End If '条件分岐終了
Next i '変数iの値を1増やしてForに戻る。
End Sub
Int関数は、小数点以下を切り捨てる関数である。従って、 Int(i / 1000) * 1000
はiの百の位以下を切り捨てた値となる。
これがiに等しくなるのは、iが1000の倍数の時だけである。
【書き方】
Rnd()
例J:乱数
Sub 例J_乱数()
For i = 1 To 10
MsgBox (Rnd())
Next i
End Sub
↓
↓
:
↓
【書き方】
Chr(ASCIIコード)
ASCIIコードとは、128種類の文字に番号を付けたものである。
例えば、数字の0〜9には48番〜57番、アルファベットのA〜Zには65番〜90番、a〜zには97番〜122番の番号が付けられている。
Sub 例K_パスワード生成()
For i = 1 To 10
Ransuu = 62 + Int(Rnd() * 61) 'Rnd関数の答から62〜122の整数を生成
Password = Chr(Ransuu) '変数Ransuuの値を文字に変換し、変数Passwordに代入
For j = 2 To 12
Ransuu = 48 + Int(Rnd() * 75) 'Rnd関数の答から48〜122の整数を生成
Password = Password & Chr(Ransuu) '2〜12文字目を追加
Next j
Cells(i, 11).Value = Password
Next i
End Sub
※Excelでは1文字目が「=」だと数式という意味になってしまうので、プログラム3行目は「=」(61番)を避けるため62〜122の範囲を生成している。
2文字目以降は「=」でも大丈夫なので、プログラム6行目では48〜122の範囲を生成している。