連載
» 2016年08月31日 05時00分 公開

Excelマクロ/VBAで始める業務自動化プログラミング入門(9):Excelシートの参照、移動、コピー、追加、削除とイベント処理 (4/4)

[薬師寺国安,ITmedia]
前のページへ 1|2|3|4       

ワークシートのイベント処理

 ワークシートのイベント(プログラム実行時におけるアクション)を使いこなせるようになると、業務の効率化が大幅にアップすることだろう。例えば、今回のサンプルで紹介しているように、必要なシートを開くだけで、必要なデータが抽出される処理などを行える。また、任意のセルをクリックすることでデータの見栄えを変化させることも可能だ。

 ワークシートイベントには、あらかじめ表2のような既定のプロシージャが用意されている。

表2 ワークシートイベント
イベント 説明
Activate ブック、ワークシート、グラフ シート、または埋め込みグラフがアクティブになったときに発生
BeforeDoubleClick ワークシートをダブルクリックしたときに発生
BeforeRightClick ワークシートを右クリックしたときに発生
Change ワークシートのセルの値が変更されたときに発生
Deactivate グラフ、ワークシート、またはブックが非アクティブになったときに発生
SelectionChange ワークシートのセルの選択範囲が変更されたときに発生
参考「Worksheetイベント(Excel)- MSDN

 ここから、幾つかの使い方を紹介しよう。まずはActivateイベントで、ワークシートイベントのプロシージャ追加方法を見てみる。

シートがアクティブになったときの処理に見る、ワークシートイベントのプロシージャ追加方法

 図17のようなデータがあり、「1年生」のシートがアクティブになったときに、「平均」が70以上のデータを取得してみよう。

図17 「平均」点数の入った表

 VBEを起動し、左のパネルからSheet1(1年生)を選択する。マウスを右クリックして「コードの表示」を選択し、表示された画面から、左の(General)と書いてある中にある、Worksheetを選択する(図18)。

図18  Sheet1(1年生)を選択し「Worksheet」を選択

 すると、下記コードが自動的に追加される。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End Sub

 今回は、このコードは使用しないので無視しておく。次に右隅上に「SelectionChanged」と表示されている箇所の[V]アイコンをクリックして「Activate」を選択する(図19)。

図19 「Worksheet」の「Activate」を選択

 すると、下記のコードが自動的に追加される。

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
リスト12 平均が70以上のデータを取り出す

 連載第7回の「オートフィルター機能AutoFilterメソッドの使い方」で紹介したAutoFilterを使って「平均」が70を含む、それ以上のデータを取り出している。AutoFilterを解除するには、「解除」ボタンを配置して、「オートフィルターの解除」マクロと関連付ける。

 Activateイベント内に記述すると、「1年生」のシートが選択されてアクティブになったときに、70(を含む)以上の平均のデータが抽出される。実行した画面は図20のようになる。

図20 「3年生」のシートがアクティブになっており。次に「1年生」のシートを選択してアクティブにした

セルをダブルクリックしたときの処理

 次に図17の任意のセルをダブルクリックした際に、その文字色と書体が変化する処理を書いてみよう。

 図18から図19の手順で、BeforeDoubleClickを選択する(図21)。

図21 「Worksheet」のイベント「BeforeDoubleClick」を選択

 すると、下記コードが追加される

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
リスト13 任意の「セル」をダブルクリックすると、文字色が「赤」、「書体」が「太字」に変化する

 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
リスト14 書式を元に戻す

 任意のセル上でマウスの右クリックをすると、リスト13で設定していた書式が元に戻る。ColorIndex=1は文字色を「黒」にしている。Bold=Falseで「太字」を解除している。

 実行すると、図22のようになる。

図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年に薬師寺聖と結成したコラボレーション・ユニット


前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.

編集部からのお知らせ

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。