システム開発におけるソフトウェアテスト(結合テスト〜システムテスト)において重要視されるエビデンス(作業記録)。前後編の2回にわたって、エビデンスとしてスクリーンショットをキャプチャし、テスト仕様書や納品書に張り付けていく作業を自動化するためのVBA/マクロのテクニックを紹介する。後編は、画像ファイルをシートに張り付け、Excel 2013のメニューからスクショを直に張り付け、画像を縮小し、指定した時間にマクロを実行する方法を解説。
前編「Selenium VBAを使って自動でブラウザーを操作してスクショをExcelに張り付けてみた」では、エビデンスとしてスクリーンショット(以下、スクショ)を撮る意義や、Selenium VBAのインストール方法と使い方、スクリーンショットを自動でExcelに張り付ける方法について解説した。
後編では、エビデンスとしてスクショを撮り、成果物としてテスト仕様書や納品書に張り付ける際に役立つ、以下の4つの便利なTipsを紹介する。
前回紹介した方法で直にExcelにスクショを張り付ける方法もあるが、Windows 7/Windows Server 2008 R2で障害発生時の操作手順を記録できるGUIツール「問題ステップ記録ツール(PSR.EXE)」や前回紹介したSelenium VBAを使わずに「Selenium WebDriver」などで、実行結果のスクショを画像ファイルとして保存している場合もあるだろう。
大量のスクショ画像ファイルを手動で張り付けていくのは、手間の掛かる作業なので、Excel VBAで自動化できると非常に効率的だ。
このTipsを実行するには、画像ファイルを任意の場所に置いておく必要があるが、今回は「C\VBAImage」フォルダーに、画像を配置している前提とする。フォルダーは適宜アレンジしてほしい。
マクロを実装するに当たり、図1のようになっているとしよう。
Excelメニューの[開発]→[挿入]と選択して「コンボボックス」を配置する。次に、「C\VBAImage」フォルダーに配置した画像名を、「U1:U10」に入力する。
配置した「コンボボックス」を選択して、マウスの右クリックで表示されるメニューから、[コントロールの書式設定]を選択する。表示される画面から、[入力範囲]に画像名を入力した「U1:U10」までを指定する。次に「リンクするセル」に、「T2」を指定しておく。ここには、「コンボボックス」から選択されたインデックス番号が表示される。
次にセル「T5」にINDEX関数を使って、「コンボボックス」から選択されたインデックス番号に該当する画像名を表示する。INDEX関数の書式は下記の通りだ。
INDEX({範囲},{行番号})
{範囲}には「U1:U10」を指定し、{行番号}にはセル「T2」に表示された「コンボボックス」から選択された画像名のインデックス番号を指定する。下記のような表記になる。関数を入力する場合は先頭に必ず「=」と入力する。
=INDEX(U1:U10,T2)
ここからは、実際にマクロを記述してみよう。画像ファイルをワークシートに張り付けるには、PicturesコレクションのInsertメソッドを使用する。
Pictures.Insert {パス付き画像ファイル名}
まず、VBE(Visual Basic Editor)のメニューから、[挿入]→[標準モジュール]と選択する。プロジェクトにModule1が追加されるので、Module1をダブルクリックして、表示されるエディター画面内にリスト1のコードを記述する。
Option Explicit Sub 画像の表示() Call 画像の削除 Range("T6").Value = Range("T5").Value Range("B2").Select ActiveSheet.Pictures.Insert "C:\VBAImage\" & Range("T6").Value End Sub
3行目では、画像を削除する「画像の削除」プロシージャ(リスト2)を呼び込んでいる。このプロシージャは別のプロシージャとして用意している。
4行目では、セル「T6」に、セル「T5」の値を表示している。セル「T5」にはINDEX関数の計算式が入っているため、画像名を指定する場合には、このセル「T5」は使用できない。そこで、セル「T5」の値を、セル「T6」に表示させて、画像名には、このセル「T6」の値を指定する。
セル「B2」を選択して(6行目)、ここを左隅上として画像を張り付けているPictures.Insertメソッドに、パスとセル「T6」の値を連結して指定する(7行目)。これで「コンボボックス」より選択した画像が順次表示されていく。
Sub 画像の削除() Dim 範囲 As Range Dim myShape As Variant Set 範囲 = Range("B2") For Each myShape In ActiveSheet.Shapes If Not Intersect(Range(myShape.TopLeftCell, myShape.BottomRightCell), 範囲) Is Nothing Then myShape.Delete End If Next End Sub
このコードの中身については、Tips「オートシェイプの種類を設定して表示する」のリスト2の解説と全く同じであるため、簡単に説明しておこう。
このコードはセル「B2」にかかった画像があった場合は、その画像を削除している。「コンボボックス」を選択して、マウスの右クリックで表示されるメニューから、「マクロの登録」を選択し、リスト1のマクロを関連付ける。
実行すると図2のように、「コンボボックス」から選択された画像が、セル「B2」を左隅上として表示される。
また今回のTipsでは、分かりやすいように1枚の画像を選択して張り付けるようにしているが、連続で張り付ける場合は、Insertメソッドをファイルの数だけ実行するようにアレンジする必要があるので、注意してほしい。
Copyright © ITmedia, Inc. All Rights Reserved.