今回はバージョンですこし違いがあるので
Excel5.0・Excel95ユーザーはこちらに用意しました。
今回は、ユーザーとの対話を考えてみましょう。
たとえば、前々回のセルの色を変えるコード・・
『 Range("A3").Interior.ColorIndex = 3 』
これだとセルA3だけしか、赤に変更することができません。
ユーザーが選択したセルを赤に変更するにはどうすればいいのでしょう??
自動記録を見てみましょう・・
Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : 2001/9/02 ユーザー名 : れいぞー
'
'
Range("A3").Select
With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
End Sub |
セルA3を選択したあとを見てください。
『Selection』というのが書いてあります。
ヘルプを見てみましょう。
『セルを選択しているときは、Range オブジェクトが返されます。何も選択していないときは Nothing が返されます。』
とのこと・・・
ということは、Range("A3").Selectを記入しなければ、
ユーザーが選択したセル(マクロを実行する直前に選択されているセル)に対して
処理が行われることになりますね。
試しに、別のセルを選択して『Range("A3").Select
』を消したコードを実行してみましょう。
Sub ColorRed()
'
' Macro1 Macro
' マクロ記録日 : 2001/9/02 ユーザー名 : れいぞー
'
'
With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
End Sub |
想像したとうり、選択したセルが、赤に塗りつぶされました。
ついでにプロシージャ名も変更します。
『Sub Macro1()』 を 『Sub
ColorRed()』に変更してください。 これだけでも、だいぶ
『プログラムっぽく』
なりました。
それでは、さらに 『プログラムっぽく』
してみましょう。
セルを選択してからいちいち、Alt+F8を押して実行・・では面倒くさいしかっこ悪いので、
シート上にボタンを貼り付けて、そのボタンを押すと
選択されているセルの色を赤に変更するようにしてみましょう。 表示⇒ツールバー⇒コントロールツールボックスとするとツールバーが現れます。
その中の、コマンドボタンをクリックしてください。
(アイコンの上にマウスポインタをおくいて1秒くらいすると名前が出てきます。下の図)
シート上で左上から右下に対角線状にドラッグすると下のようになります。 このコマンドボタンを押すと、さっきのコードを実行するようにすれば結構便利ですね。
早速やってみましょう。
コマンドボタンの上で右クリックして、コードの表示をクリックします。
(もしくはボタンをダブルクリック)すると、VBEが現れて、
Private Sub CommandButton1_Click() とEnd Sub
の間に
カーソルが置かれています。(図)
ここに、ボタンが押されたときの処理を書き込みます。
(これを、イベントといいます。この場合はクリックイベント)
ここは、『シートモジュール』といいます。
ここには、シートのさまざまなイベントをサポートします。(後述・・・たぶん・・)
(シートモジュールの表示方法はいくつかありますが一般的なのを2つ・・
1
シートタブを右クリックしてコードの表示をクリックすると表示されます。
2 VBEのプロパティーウィンドウで対象のシートをダブルクリックか、右クリックしてコードの表示)
Private Sub CommandButton1_Click()
With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
End Sub |
こんな風に書いてもいいのですが、ここに書き込んでしまうとこの処理は、
このボタンが押されたときにしか実行できません。
たとえば、ほかのシートにボタンを作って、それを押したときも実行したい場合
そのボタンのクリックイベントにまた同じものを書き込まなくてはなりません。
それでは面倒だし、あまり効率的といえません。
では、どうすればいいのでしょう?
Private Sub CommandButton1_Click()
Call ColorRed
End Sub |
これだけです。
ColorRed() は標準モジュールにかかれているので何処からでもコールできます。
こうすれば、ほかのシートにボタンを作ってこのコードを実行させたい場合も
そのボタンのイベントプロシージャに Call ColorRed
と書くだけなので
非常に効率的です。
しかも、コードの内容に変更があった場合、前者の書き方だと
そのボタン全部のコードを書き換えなくてはいけませんが、
後者の場合は標準モジュールのColorRed
1箇所ですむので保守・管理も簡単です。
さて、←このボタンを押して、デザインモードを終了させて
セルを選択して、ボタンを押してみましょう。
どうですか?選択範囲が赤くなりましたか?なったら成功です!!
今回は、ボタンにマクロを登録しましたが、同じような方法で図形にも登録できるので、簡単に説明します。
表示⇒ツールバー⇒図形描画をクリックするとツールバーが現れます。
四角形を選択して、シートに貼り付けたらその四角形を右クリックしてマクロの登録をクリックすると
マクロの登録ダイアログボックスが現れるので、マクロを選択してOKを押します。
では、色を元に戻すボタンを作ってそのボタンを押すとセルの色がなくなるコードを
自分で作ってみてください。正解は、こちらです。(上の講座をみればわかるはず・・)
■■■■■■■■■■■■
まとめ ■■■■■■■■■■■■■
1 Selectionプロパティーはセルを選択しているときは、Range
オブジェクトを返す。
2
標準モジュールのプロシージャはどのプロシージャからも呼び出せる。
3 図形にもマクロを登録できる。 |
今回は、ボタンのクリックイベントにより選択範囲のセルの色を変更する方法を説明しました。
赤色ばっかりじゃなく、色も選択できるようになるともっと使い勝手がよくなりそうです。
次回は、色も選択できるようにすることによって変数の使い方を説明したいと思います。
|