今回はVBAでSmartArtを使ってシートごとに作業ステップを表示するバーを作成してみようと思う。
作成物のイメージはこのようなもの。
今回マクロで作成するのは上部のStepを表示するバーの部分だけ。
シート2ならStep2がハイライトされる。
ひとつの業務に使用する一連のマクロをExcelブックにまとめてしまうことがよくある。
実行順が決まっており、それぞれシートに分かれている場合にこのようにステップが表示されていると気が利くと思われるかもしれない。
手でも作れるけれど、色の塗り分けが面倒なのと、ステップの変更などで何度も入れ替えたりする必要が出てくるかもしれないのでここはマクロでさくっと作れるようにしておきたい。
ということで早速完成コードの紹介。
Sub Stepバー作成() Dim sheetNo As Long For sheetNo = 1 To ThisWorkbook.Worksheets.Count 'Stepバー生成 Dim ws As Worksheet: Set ws _ = ThisWorkbook.Worksheets(sheetNo) Dim sh As Shape: Set sh _ = ws.Shapes.AddSmartArt(Application.SmartArtLayouts( _ "urn:microsoft.com/office/officeart/2005/8/layout/hChevron3"), 5, 5) sh.Height = 20 sh.Width = 500 '一旦ノードを全削除 Dim i As Long For i = 1 To sh.SmartArt.Nodes.Count sh.SmartArt.Nodes.Item(1).Delete Next 'ブックの数だけノードを追記しつつ、 '対象ブックのStepだけオレンジに、それ以外はグレーアウト Dim stepNo As Long For stepNo = 1 To ThisWorkbook.Worksheets.Count With sh.SmartArt.Nodes.Add .Shapes(1).Fill.ForeColor.RGB = IIf(sheetNo = stepNo, _ XlRgbColor.rgbOrange, _ XlRgbColor.rgbLightGray) .TextFrame2.TextRange.Text = "Step" & stepNo End With Next Next End Sub
使い方は、シートをあらかじめ必要な枚数分追加しておいてこのマクロを実行するだけ。
するとシートの枚数に応じたStep数でバーが作成される。
このマクロはShape型、SmartArt型、SmartArtLayout型、SmartArtNode型の4つの関係を押さえておくと理解しやすい。が、これらについてはMSDNなどに説明を譲る。
オブジェクトブラウザやTypeName関数で、それぞれが持つプロパティがどのようなデータ型を返すのかを把握するのが理解のポイントである。
Application.SmartArtLayoutsにURLみたいな引数を渡している部分があるが、これはSmartArtの種類を示すIDである。覚えられるものではないし、マクロの記録で調べられるのでそこは気にしなくて良い。
あ、後で気づいたけど、この手のマクロはパワポのほうが活用できそう。