ワークシートのイベント(プログラム実行時におけるアクション)を使いこなせるようになると、業務の効率化が大幅にアップすることだろう。例えば、今回のサンプルで紹介しているように、必要なシートを開くだけで、必要なデータが抽出される処理などを行える。また、任意のセルをクリックすることでデータの見栄えを変化させることも可能だ。
ワークシートイベントには、あらかじめ表2のような既定のプロシージャが用意されている。
イベント | 説明 |
---|---|
Activate | ブック、ワークシート、グラフ シート、または埋め込みグラフがアクティブになったときに発生 |
BeforeDoubleClick | ワークシートをダブルクリックしたときに発生 |
BeforeRightClick | ワークシートを右クリックしたときに発生 |
Change | ワークシートのセルの値が変更されたときに発生 |
Deactivate | グラフ、ワークシート、またはブックが非アクティブになったときに発生 |
SelectionChange | ワークシートのセルの選択範囲が変更されたときに発生 |
参考「Worksheetイベント(Excel)- MSDN」 |
ここから、幾つかの使い方を紹介しよう。まずはActivateイベントで、ワークシートイベントのプロシージャ追加方法を見てみる。
図17のようなデータがあり、「1年生」のシートがアクティブになったときに、「平均」が70以上のデータを取得してみよう。
VBEを起動し、左のパネルからSheet1(1年生)を選択する。マウスを右クリックして「コードの表示」を選択し、表示された画面から、左の(General)と書いてある中にある、Worksheetを選択する(図18)。
すると、下記コードが自動的に追加される。
Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub
今回は、このコードは使用しないので無視しておく。次に右隅上に「SelectionChanged」と表示されている箇所の[V]アイコンをクリックして「Activate」を選択する(図19)。
すると、下記のコードが自動的に追加される。
Private Sub Worksheet_Activate() End Sub
このコードの中にリスト12のマクロを書いていく。
Private Sub Worksheet_Activate() Range("D4").AutoFilter Field:=3, Criteria1:=">70" End Sub Sub オートフィルターの解除() If ActiveSheet.AutoFilterMode = True Then Range("B4").AutoFilter End If End Sub
連載第7回の「オートフィルター機能AutoFilterメソッドの使い方」で紹介したAutoFilterを使って「平均」が70を含む、それ以上のデータを取り出している。AutoFilterを解除するには、「解除」ボタンを配置して、「オートフィルターの解除」マクロと関連付ける。
Activateイベント内に記述すると、「1年生」のシートが選択されてアクティブになったときに、70(を含む)以上の平均のデータが抽出される。実行した画面は図20のようになる。
次に図17の任意のセルをダブルクリックした際に、その文字色と書体が変化する処理を書いてみよう。
図18から図19の手順で、BeforeDoubleClickを選択する(図21)。
すると、下記コードが追加される
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) End Sub
この中に、リスト13のマクロを書いていく。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) With Selection .Font.ColorIndex = 3 .Font.Bold = True End With Cancel = True End Sub
SelectionオブジェクトにWith〜End Withを使うことで、ワークシートの選択しているセルに対して、文字色を「赤」に、「書体」を「太字」に設定している。
次に、任意のセル上でマウスの右クリックをすると、リスト13で設定していた書式が元に戻る処理を書いてみよう。
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) With Selection .Font.ColorIndex = 1 .Font.Bold = False End With Cancel = True End Sub
任意のセル上でマウスの右クリックをすると、リスト13で設定していた書式が元に戻る。ColorIndex=1は文字色を「黒」にしている。Bold=Falseで「太字」を解除している。
実行すると、図22のようになる。
今回のワークシートに関する処理は理解できただろうか。今までの連載で学んできた処理を利用したサンプルを紹介している。分からなければ、おさらいの意味で以前の回を読み直してほしい。
次回は、今回紹介した「シート」の集合体「ブック」について解説する。
【2016/8/31】Windows 10、Excel 2016に対応しました。
PROJECT KySS 薬師寺 国安(やくしじ くにやす)
1950年生まれ。フリーVBプログラマ。高級婦人服メーカーの事務職に在職中、趣味でVBやActiveXに取り組み、記事を執筆。2003年よりフリー。.NETやRIAに関する執筆多数。Windowsストアアプリも多数公開中(約270本)。
Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。
Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。
Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。
PROJECT KySSは、1997年に薬師寺聖と結成したコラボレーション・ユニット
Copyright © ITmedia, Inc. All Rights Reserved.