Excelシートの参照、移動、コピー、追加、削除とイベント処理:Excelマクロ/VBAで始める業務自動化プログラミング入門(9)(4/4 ページ)
プログラミング初心者を対象にExcelマクロ/VBAを使った業務自動化プログラムの作り方を一から解説します。今回は、ワークシート操作のメソッド、Move、Copy、Add、Deleteに加えて、Array関数による複数ワークシートの参照、イベント処理やFunctionプロシージャなどの使い方について【Windows 10、Excel 2016に対応】。
ワークシートのイベント処理
ワークシートのイベント(プログラム実行時におけるアクション)を使いこなせるようになると、業務の効率化が大幅にアップすることだろう。例えば、今回のサンプルで紹介しているように、必要なシートを開くだけで、必要なデータが抽出される処理などを行える。また、任意のセルをクリックすることでデータの見栄えを変化させることも可能だ。
ワークシートイベントには、あらかじめ表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.
関連記事
- Excelマクロ/VBAリファレンス用途別・キーワード別一覧超まとめ
- ピボットテーブルとは何か──「そもそも、何をする機能か」を理解する
Excelを通じて「ピボットテーブル」の基礎を学び、データ分析を実践するまでを習得する本連載。初回はピボットテーブルの基礎と、「どんなことができるのか」を解説する。 - どんなビジネスにも欠かせないリレーショナルデータベースの基礎知識と作り方――テーブル、レコード、フィールド、主キーとは
Accessを通じて、初心者がリレーショナルデータベースやSQLの基本を学び、データベースを使った簡単なシステムの作り方を習得する本連載。初回はデータベースの基本を理解し、Accessを使い始めてみよう。