[ HOME ] [ BACK ] [ NEXT ]

犬でもわかるExcelVBA講座

§9 ボタンをクリックするとセルの色が変わるようにする。

今回はバージョンですこし違いがあるので
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つ・・
    シートタブを右クリックしてコードの表示をクリックすると表示されます。
    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 図形にもマクロを登録できる。

今回は、ボタンのクリックイベントにより選択範囲のセルの色を変更する方法を説明しました。
赤色ばっかりじゃなく、色も選択できるようになるともっと使い勝手がよくなりそうです。
次回は、色も選択できるようにすることによって
変数の使い方を説明したいと思います。


■このページはリンクフリーです。どんどんはってください。特に連絡する必要もありません。
■ご連絡いただければ、こちらからもリンクします。出来れば下のバナーを使ってください。
■ご意見・ご要望はこちら
からお願いします。

       

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

答え

Sub ColorNone()
    With Selection.Interior
        .ColorIndex = xlNone
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
    End With
End Sub

 .ColorIndex xlNone にするだけです。
しかし、「色なし」が「xlNone」だとどうやって調べればいいのでしょうか?・・・

自動記録すればすぐにわかります。

<<戻る