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

» 2016年08月31日 05時00分 公開
[薬師寺国安ITmedia]

Array関数で複数ワークシートを参照

 複数のシートを同時に指定するには、VBAのArray関数を使用する。Array関数を使うと、複数のシートをまとめて格納できる。

 例として「3年生」と「6年生」のシートを同時に参照して、「3年生」のシートをActivateイベント(「ワークシートのイベント処理」で後述)でアクティブにしてみよう。リスト3のようにマクロを記述する。

Sub 複数のワークシートを参照する()
  Worksheets(Array("3年生", "6年生")).Select
  Worksheets("3年生").Activate
End Sub
リスト3 複数のワークシートを参照

 実行すると図7のように表示される。

図7 「3年生」と「6年生」のワークシートが選択状態になり、「3年生」のシートがアクティブになった

 ※全てのワークシートを選択する場合は、「Worksheets.Select」とだけ記述するといい。

Nameプロパティでシート名の変更

 次に、シートの名前をマクロから変更してみよう。「6年生」を選択状態にして[○に+]のアイコンで新規にシートを追加すると、「6年生」の次に「Sheet8」が追加される。この「Sheet8」の名前をマクロから変更する。

 「メニュー」のシートに図8のように「シート名の変更」ボタンを配置しておく。

図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
リスト4 アクティブなシート名の変更

 「シート名の変更」ボタンをクリックすると、まずInputBox関数で入力ダイアログボックスが表示され、シート名を入力するよう促される(3行目)。

 シート名を入力せずに[OK]ボタンをクリックすると(4行目)、警告メッセージが表示される(5行目)。

 シート名を入力して[OK]ボタンをクリックすると(7行目)、「Sheet8」のシート名が指定したシート名に変更される(8行目)。名前を変更後、そのシートがアクティブになる(9行目)。

 実行すると、図9のように表示される。なお、「学年別成績集計」の中に書いてある、赤文字の「学年別成績集計」は、分かりやすくするために、手動で入力したもので、VBAで書いたものではない。

図9 入力ダイアログボックスにシート名を入力して[OK]ボタンをクリックすると(左側)、「Sheet8」が指定したシート名に変更される(右側)

 これで「Sheet8」が「学年別成績集計」に名前が変わり、シートがアクティブになった。これは、シート名もマクロによって変更できるという一例にすぎない。

 「別にマクロで変更しなくても、直接変更すればいいではないか」と思われるかもしれない。しかし、今後複雑なマクロなどを書けるようになった際には、マクロでシート名を変更する処理の必要性も出てくると思う。そういった意味でも、マクロで処理できることは、マクロで処理できるよう学んでおくに越したことはない。

ColorIndex/Colorプロパティでシート名の背景色を変更

 次に、シート名の背景色を変更する処理を見ていこう。またまたここで疑問を持たれる読者もいるかもしれない。「シート名の背景色を変更して、何のメリットがあるのか」と。これにはちゃんとしたメリットが存在する。

 例えば、入力が必須の項目があったと仮定しよう。シートの中でその必須の項目が入力されていなければ、シート名の背景色を変更して、「このシートには必須項目が入力されていませんよ!」という目印として使用できるのだ。マクロは、非常に奥深く、ちゃんとそれなりの理由があってマクロ化するようにされているのだ(きっと……)。

 シートの背景色を変更するには、ColorIndexやColorプロパティを使用する。ColorIndexの使用方法については、既に連載第5回の「セルのフォント書式設定」で解説済みであるから、今回はColorプロパティを使った方法を紹介する。書式は下記の通りだ。

Colorプロパティの書式

シートTabオブジェクト.Color={RGBカラー}


 {RGBカラー}に指定する色は表1のようになる。

表1 RGBカラーの指定例
赤(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
リスト5 「学年別成績集計」のシートの背景色を「赤」に変更する

 解説はするまでもないだろう、RGBには表1の「赤」を指定している。実行すると図10のようになる。この図では赤のグラデーションが掛かっているが、この状態から、他のシートをアクティブにすると、「学年別成績集計」のシートの背景色は「真っ赤」に変わる。

図10 「学年別成績集計」シートのタブが「赤」になっている

 「赤」に変わったシートのタブを元に戻すにはRGBカラーに「白」を指定すれば元に戻る。

 次ページでは、シートの移動、コピー、追加、削除について解説しよう。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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