難易度:★★☆(やや難)
※当校のExcel VBAコースを補足する内容となっています。
いきなりだけど、シートモジュールって何?
いままで紹介してきたコードと、なにか違うの?
シートモジュール・・・、そうだね
例えば、
・ダブルクリックしたとき、実行したい。
・あるセルの値が変更になったとき、実行したい。
・セルを選択したとき、実行したい。
などのイベントプロシージャ(特定の動作によって実行するプログラム)が書かれるケースが多いよ。
もちろん、普通のプログラムを書くこともできるよ。
ふーん。
でも、イメージわかない。
書くって、どこに?
ダブルクリックて、どうやって書くの?
うん、そうだね。
では、今回はシートモジュールの書き方について紹介しましょう。
シートモジュールとは
特定の動作によって実行するプログラム「イベントプロシージャ」が書かれるケースが多いよね。
シートモジュールに書いたコードは、そのシートで発生したイベント時に実行されるんだ。
例えば、こんな場合。
・セルの値が変更になった時
・セルをダブルクリックした時
・セルを選択した時
など、いろいろなイベントがあるんだ。
「イベントプロシージャ」が書かれるのは、ブックモジュールも同じことが言えるんだけど、イベントの種類が違ってくるんだよね。
ブックモジュールについては、またの機会に説明しますね。
シートモジュールの書き方
VBEを立ち上げ、左側ウインドウ(プロジェクトエクスプローラ)の目的のシート名を右クリックしよう。右クリックメニューから、「コードの表示」を選択します。
右側にコードウインドウが表示された。
コードウインドウの上のコンボボックスを変更します。左右に並んだコンボボックスあるよね。
左のコンボボックスの値を「Worksheet」を選んでみると、右側のコンボボックスも値が選べるようになった。
右側のコンボボックスにあるイベントの中から、目的に合ったものを選ぶことができるんだ。
今回は、リストの中から「Change」を選んでみよう。
これで、準備完了。
- そうそう、シートモジュールに不要なイベントが表示されてしまったら、BackSpaceやDeleteキーを使って削除しておいてくださいね。
コードを書いてみよう
呼び出すってなあに?
コードは、通常、単体コードで済むことはなくて、複数のコードに分かれるんだよね。
コードの途中で、別のコードを使って仕事をする。そして、元のコードの続きを実行する。
この時、別のコードを呼び出すと言うんだ。
一度やってみよう。
お釣りを計算するコードを事前に見ておこうか。
入力するセルは、B1だけ、あとは、結果を表示してるだけだね。
このコードは、Alt+F8でマクロを選択し実行したよね。これを自動化してみようと思う。
お釣りを計算するコードをここに乗せておくよ。
すべて選択して、Ctrl+Cでコピーをしよう。
Sub お釣り計算()
Dim i, j As Long
Dim w_Kinsyu() As Variant
Dim w_Amari As Long
Const w_Tanka = 130
w_Kinsyu = Array(10000, 5000, 1000, 500, 100, 50, 10, 5, 1)
Range("A4:D12") = ""
If Cells(1, 2) < w_Tanka Then
MsgBox "お金が足りません"
Exit Sub
End If
w_Amari = Cells(1, 2) - w_Tanka
j = 4
For i = 0 To 8
If Int(w_Amari / w_Kinsyu(i)) <> 0 Then
Cells(j, 1) = w_Kinsyu(i)
Cells(j, 2) = "円"
Cells(j, 3) = Int(w_Amari / w_Kinsyu(i))
Cells(j, 4) = "枚"
w_Amari = w_Amari Mod w_Kinsyu(i)
j = j + 1
End If
Next i
End Sub
これを、新規ワークブックの標準モジュールに貼り付けるよ(Ctrl+V)。
いよいよシートモジュールだ。
まず、シートモジュールを表示してね。
シートモジュールの書き方に示したように、コードウインドウの上の右側のコンボボックスの値が、Changeのイベントプロシージャになっているかな。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 1 And Target.Column = 2 Then
Call お釣り計算
End If
End Sub
「Target」は、Rangeオブジェクトで、セルやセル範囲のこと。
「Target.Row」は、セルの値が変わった(Change)行数で、
「Target.Column」は、セルの値が変わった(Change)列数になります。
「Call お釣り計算」は、お釣り計算コードを呼び出す、です。
つまり、セル「B1」の値が変わったら、お釣り計算するというコードを実行されるわけです。
簡単な例ですが、シートモジュールの紹介でした。