UserFormからセルを操作する第2回目
■今回から前回作ったフォームを使用して具体的なコードを書いてみます
コードの書き方としては初心者向けに、いちいち回りくどい処理を重ねて書いていますがわかりやすいことが第一と考え、なるべく細かく解説することを心がけています。いきなり変数とか書いているところもありますがわからないところはネットで上手に検索するなどして調べることも上達の一歩だと思いますので、よろしくお付き合いください。
■フォームが開いた回数をフォームに貼り付けたラベルに表示するコードを解説します。
前準備
■まず最初に回数を数える用に設定値保存用のシートを作っておきます。
ここではシートのタブのすぐ右側にある⊕をクリックしてシート2(Sheet2)を追加しておきます
そして、シートの名前を「設定」としておきます。
コードどこに書く?
前回まででブックを開くとフォームが開くところまで上手くできたと思います。
ブックを閉じていたら、開いてください。
当然のようにフォームが開くので右上の×ボタンでフォームを閉じてください。
Alt +F11でエディターを開きます。
プロジェクトウインドウでUserForm1をダブルクリックでフォームを表示させます。
フォーム上で貼り付けたコントロールが無いところをダブルクリックしてコードウインドウを開きます。
コードウインドウの左上のボックスがUserFormとなっていることを確認して、右側のボックスの▼ボタンを押してリストを開きます。
リストからInitialize(初期化の意味でイニシャライズと読みます)を選択します。
フォームが開く直前に発生するイベントで、フォームを表示するために準備しておくべきことをコードにまとめるためのプロシージャです
赤枠で示したように自動的にサブプロシージャが表示したと思います。
ここに具体的な処理の内容を書いていきます。
コード解説
Private Sub UserForm_Initialize() 'フォームが開く直前に以下の処理を実行します ' '起動回数カウント用変数を宣言 Dim kaisuu As Integer '設定用のシートのA1セルの値に1を加算した値を変数に代入する kaisuu = Sheet2.Cells(1, "A").Value + 1 '回数を確認する MsgBox "起動回数は" & kaisuu & "です" '今回の起動回数を記憶する Sheet2.Cells(1, "A").Value = kaisuu 'ラベルに起動回数を表示する Me.Label1.Caption = "起動回数: " & kaisuu End Subし
■5行目 Dim kaisuu As Integer
整数型の変数<kaisuu>を宣言します。
変数とは変化する数です。例 kaisuu=1、kaisuu=5などと書きます。kaisuuは、ある時は1だったりまたある時は5だったりします。
ここでは整数型なのでkaisuuには整数の数値を入れることができます。(0とか1,1000とかです。0.5とかの少数点のある数値でない)
使いたい変数を最初に宣言しておく必要があります。(変数を利用する行より前の行に宣言)通常プロシージャの最初の行に書きます
■8行目 kaisuu = Sheet2.Cells(1, “A”).Value + 1
このコードは宣言した変数kaisuuにシート2のA1セルの値に1を加算して入れる(代入する)という意味です。
最初の段階ではA1セルは空白で何も書かれていないのでVBAでは値を0と判断します。
これに1を足すので0+1は結果1がkaisuuに入ることになります。
変数はこのように様々な形で(数値を直接代入したり、計算の結果を代入したり等)値を設定したり、値を参照したりすることができます。
■11行目 MsgBox “起動回数は” & kaisuu & “です”
この行では8行目でkaisuuに入っている数値を読み取ってメッセージとして書き出して表示するという意味です。
MsgBoxはこれに続く文章を表示するためのVBAが用意している関数です。
“起動回数は” & kaisuu & “です” では、”起動回数は” と ”です” の間にkaisuuを入れて一つの文字列(文章)につなげています。
VBAではコード内で文字列を扱うときはその文字列をダブルクォーテーション(”)で囲う約束事になっています。また&は特殊な記号で、文字列と文字列を結合するための予約されたキーワードになっています。
別にこの行でメッセージボックスを出す必要はないのですが、回りくどいですが、よく使う関数なので練習のために一行かきます。
■14行目 Sheet2.Cells(1, “A”).Value = kaisuu
メッセージボックスで回数を確認したあと、このkaisuuの値を保存します。保存場所は8行目でkaisuuに値をいれたときのシート2のA1セルになります。
このコードがないと処理が終わった後kaisuuの値は消えてなくなってしまいます。
このコードは8行目とは逆の書き方になります。シート2のA1セルにkaisuuの値を書き込むという意味です。
■17行目 Me.Label1.Caption = “起動回数: ” & kaisuu
MeはVBAの決められた予約語で、ここではUserForm1のことです。
この一連のコードを書いたプロシージャはフォームが開くときに実行されるイベントに書かれるのでMeとはこのフォームのことですから、UserForm1.Label1.Caption = “起動回数: ” & kaisuu と同じです。ま、2文字で表現できるのは便利なのでMeを使いました。
意味は、フォームに最初に貼り付けたラベルコントロールに起動回数を表示しなさい。という意味です。
ここまでで、このプロシージャは終わりです
全部書き終えたら(このプロシージャの中身をコピーして貼り付けてもOKですよ)
上書き保存します。上書き保存の仕方は前回の「UserFormからセルを操作する1」下のカードから参考にしてください。
■保存が終わったら早速試してみましょう。一旦ブックを閉じたら、再度ブックを開いてください
処理の結果
メッセージボックスが表示されたとおもいます。
OKボタンを押すと 設定したフォームが開きます
設定シートのA1セルに回数が保存されて、フォームの一番上のラベルにも起動回数が表示できたと思います。
■フォームの×ボタンをクリックするとフォームは閉じます。
■ブックを閉じてまた開くとフォームの起動回数はさっきの回数に1加算されたでしょうか?
■実はシート2のA1セルの値はブックを保存しないと消えてしまいますが、手動で保存して閉じればいいのですがいちいち手動でやらなくても下図のようにしておくと自動的に保存します。
左側のプロジェクトウインドウでThisWorkbookをダブルクリックすると自動的にSubプロシージャが書き込まれます。ここで右側のボックスのイベントリストからBeforeCloseを選択します。
このイベントBeforeCloseはブックが閉じる直前に発生します。
ここに、ActiveWorkbook.Save と一行書き込みます。このブックを保存するコードです。
■こうしておけば保存を忘れることなく自動保存化できました。
今回はここまでです。どうでしょう、少しはExcelに振り回されるのではなく、エクセルを制御したという実感は持てたでしょうか、まだ数行のコードですが、これらの単純なコードの積み重ねで相当複雑なプログラムも実現できるのがVBAなのです。
次回はテキストボックスやコマンドボタンの使い方をやってみます
コメント