記事のターゲット
- 開発現場で結合テスト等の画面キャプチャを伴うエビデンスが必要な人
- エビデンスに画像だけでなく吹き出し等の補助説明を求められている人
- VBAに関しての知識がある人
はじめに
開発現場等でスクリーンショット等で画面キャプチャをExcelに貼り付け、その画像に吹き出しや枠線を用いて操作の手順を説明することが多いと思います。
ただ、同じような作業なので別のテストケースで使用したエビデンスから説明用のパーツのみ使いまわしたいときがある方も多いはず(私はそうでした)。でも実際にコピーしようとするときにCtrl+Aでの全選択では必要ない画像まで選択してしまい面倒ですよね。
なので今回は自分で指定した範囲内のスクショ画像以外の図形(今回は吹き出し、コメントボックス、枠線)のみを選択するマクロを紹介します。
やりたいこと
下の画像のようにスクショと図形が配置されたExcelで指定した範囲内にある図形のみを選択できるようにしていきます。


実際のコード

上の画像のように開発タブを開き、マクロをクリックします。
以下の画面が表示されたらマクロ名を入力し、作成をクリックします。

開かれたVBAの画面に以下のコードをそのまま貼り付けてもらえば実行できると思います。
Option Explicit
Sub パーツ選択()
Dim shp As Shape
Dim ran As Range
Dim sel
Set sel = Selection
' 選択シート内の図形全てを判定
For Each shp In ActiveSheet.Shapes
' 図形が配置されているセルの範囲を取得
Set ran = Range(shp.TopLeftCell, shp.BottomRightCell)
' 選択した範囲と図形が配置されている範囲が被っていれば選択
If Not Application.Intersect(ran, sel) Is Nothing Then
If shp.Type = 1 Then
shp.Select Replace:=False
End If
If shp.Type = 17 Then
shp.Select Replace:=False
End If
End If
Next
End Sub
コードの途中にある1と17の数字は「MsoShapeType 列挙」というExcelの図形に割り当てられている値です。
ですのでもし選択したい図形が他にもある場合は以下のリファレンスを参考に、Ifブロックを追加していただければ応用が利きます。
https://docs.microsoft.com/ja-jp/office/vba/api/office.msoshapetype
他のExcelファイルでもこのマクロを使用したい場合はアドイン追加すれば便利ですので試してみてください。
おわりに
今回のマクロを使用するとある程度のまとまりを一括選択し、グループ化することで動かしやすくなったりほぼ同じテスト内容を行うときに一括して吹き出し等をコピーすることができると思います。ただ、きちんと内容を変えることは忘れないようにしてください。