Excelシートの参照、移動、コピー、追加、削除とイベント処理:Excelマクロ/VBAで始める業務自動化プログラミング入門(9)(2/4 ページ)
プログラミング初心者を対象にExcelマクロ/VBAを使った業務自動化プログラムの作り方を一から解説します。今回は、ワークシート操作のメソッド、Move、Copy、Add、Deleteに加えて、Array関数による複数ワークシートの参照、イベント処理やFunctionプロシージャなどの使い方について【Windows 10、Excel 2016に対応】。
Array関数で複数ワークシートを参照
複数のシートを同時に指定するには、VBAのArray関数を使用する。Array関数を使うと、複数のシートをまとめて格納できる。
例として「3年生」と「6年生」のシートを同時に参照して、「3年生」のシートをActivateイベント(「ワークシートのイベント処理」で後述)でアクティブにしてみよう。リスト3のようにマクロを記述する。
Sub 複数のワークシートを参照する() Worksheets(Array("3年生", "6年生")).Select Worksheets("3年生").Activate End Sub
実行すると図7のように表示される。
※全てのワークシートを選択する場合は、「Worksheets.Select」とだけ記述するといい。
Nameプロパティでシート名の変更
次に、シートの名前をマクロから変更してみよう。「6年生」を選択状態にして[○に+]のアイコンで新規にシートを追加すると、「6年生」の次に「Sheet8」が追加される。この「Sheet8」の名前をマクロから変更する。
「メニュー」のシートに図8のように「シート名の変更」ボタンを配置しておく。
指定したシート名の名前を変更するには、Nameプロパティを使用する。「シート名の変更」ボタンに関連付けるマクロはリスト4のようになる。
Sub シート名の変更() Dim sheetName As String sheetName = InputBox(Prompt:="シート名を入力", Title:="シート名") If sheetName = "" Then MsgBox "シート名を入力してください。" Exit Sub Else Worksheets("Sheet8").Name = sheetName Worksheets(sheetName).Activate End If End Sub
「シート名の変更」ボタンをクリックすると、まずInputBox関数で入力ダイアログボックスが表示され、シート名を入力するよう促される(3行目)。
シート名を入力せずに[OK]ボタンをクリックすると(4行目)、警告メッセージが表示される(5行目)。
シート名を入力して[OK]ボタンをクリックすると(7行目)、「Sheet8」のシート名が指定したシート名に変更される(8行目)。名前を変更後、そのシートがアクティブになる(9行目)。
実行すると、図9のように表示される。なお、「学年別成績集計」の中に書いてある、赤文字の「学年別成績集計」は、分かりやすくするために、手動で入力したもので、VBAで書いたものではない。
これで「Sheet8」が「学年別成績集計」に名前が変わり、シートがアクティブになった。これは、シート名もマクロによって変更できるという一例にすぎない。
「別にマクロで変更しなくても、直接変更すればいいではないか」と思われるかもしれない。しかし、今後複雑なマクロなどを書けるようになった際には、マクロでシート名を変更する処理の必要性も出てくると思う。そういった意味でも、マクロで処理できることは、マクロで処理できるよう学んでおくに越したことはない。
ColorIndex/Colorプロパティでシート名の背景色を変更
次に、シート名の背景色を変更する処理を見ていこう。またまたここで疑問を持たれる読者もいるかもしれない。「シート名の背景色を変更して、何のメリットがあるのか」と。これにはちゃんとしたメリットが存在する。
例えば、入力が必須の項目があったと仮定しよう。シートの中でその必須の項目が入力されていなければ、シート名の背景色を変更して、「このシートには必須項目が入力されていませんよ!」という目印として使用できるのだ。マクロは、非常に奥深く、ちゃんとそれなりの理由があってマクロ化するようにされているのだ(きっと……)。
シートの背景色を変更するには、ColorIndexやColorプロパティを使用する。ColorIndexの使用方法については、既に連載第5回の「セルのフォント書式設定」で解説済みであるから、今回はColorプロパティを使った方法を紹介する。書式は下記の通りだ。
Colorプロパティの書式
シートTabオブジェクト.Color={RGBカラー}
{RGBカラー}に指定する色は表1のようになる。
色 | 赤(R) | 緑(G) | 青(B) |
---|---|---|---|
黒 | 0 | 0 | 0 |
青 | 0 | 0 | 255 |
緑 | 0 | 255 | 0 |
シアン | 0 | 255 | 255 |
赤 | 255 | 0 | 0 |
マゼンタ | 255 | 0 | 255 |
黄色 | 255 | 255 | 0 |
白 | 255 | 255 | 255 |
図9の「学年別成績集計」のシートの背景色を「赤」に変更するマクロはリスト5だ。
Sub 学年別成績集計シートの背景色を赤にする() Worksheets("学年別成績集計").Tab.Color = RGB(255, 0, 0) End Sub
解説はするまでもないだろう、RGBには表1の「赤」を指定している。実行すると図10のようになる。この図では赤のグラデーションが掛かっているが、この状態から、他のシートをアクティブにすると、「学年別成績集計」のシートの背景色は「真っ赤」に変わる。
「赤」に変わったシートのタブを元に戻すにはRGBカラーに「白」を指定すれば元に戻る。
次ページでは、シートの移動、コピー、追加、削除について解説しよう。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- Excelマクロ/VBAリファレンス用途別・キーワード別一覧超まとめ
- ピボットテーブルとは何か──「そもそも、何をする機能か」を理解する
Excelを通じて「ピボットテーブル」の基礎を学び、データ分析を実践するまでを習得する本連載。初回はピボットテーブルの基礎と、「どんなことができるのか」を解説する。 - どんなビジネスにも欠かせないリレーショナルデータベースの基礎知識と作り方――テーブル、レコード、フィールド、主キーとは
Accessを通じて、初心者がリレーショナルデータベースやSQLの基本を学び、データベースを使った簡単なシステムの作り方を習得する本連載。初回はデータベースの基本を理解し、Accessを使い始めてみよう。