
【VBA✖テストエンジニアリング3】エビデンス採取ツール(実際にどこの現場でも個人的に開発して使ってるツール)の作りかた③~結局、誰かへの思いやり
さてと、前回
で、
マクロの記録の基本的な作法
は紹介したので、その続き。
同じ手法で作れる機能をどんどん組み込んでいこう💃
その前に、この連載で通底する考え方を列挙しとくや( ´∀` )
(開発現場における)VBAの鉄則
コードの8割はマクロの記録で、Excelに書かせる(👉開発現場は学校のお勉強じゃない。開発現場に「マクロの記録は邪道」なんて存在しない)
小さく作って、大きく動かす(一度書いたコードは再利用する)
手で動かして、出来ないことは基本、コードでも出来ないし、やらない方が良い(小難しい機能はバグと改修コストになるので)
グローバルに変数や引数は定義する(同じものはひとつにまとめた方が管理が楽)
関数こそ最強のAPI(👈今回のツールでは関係ないので、やらない)
「〇〇すればいい。」、「〇〇でやればいい」が最大の敵
ここまでの関連記事
☆基本的な流れ
1、マクロの記録でマクロを起こす
↓
2、マクロの余計なコードを消す
↓
3、ユーザーフォームにコマンドボタンを追加する
↓
4、編集したマクロをユーザーフォームに追加する
↓
5、コマンドボタンのコード内でCallステートメントで追加したマクロを呼び出す
んだば、早速
このツール全体の機能リスト
◆シート・セルの操作フレーム
書式ボタン
シート追加ボタン
シート番号入力ボタン
行追加ボタン
行の高さボタン
A1選択ボタン👈今回やる
A4選択ボタン👈今回やる
◆図の操作フレーム
手順番号ボタン
手順番号入力ボタン
黒枠縮小のみボタン=前回で紹介済
スクショ画像ボタン=前回で紹介済
挿入した図ボタン👈今回やる
吹き出しボタン
赤枠ボタン
折れ線ボタン
右矢印ボタン
下矢印ボタン
◆シートリストフォーム
シート数ラベル
シート数カウントラベル
シート名リスト
てな感じなので、今回やるところをまとめると、
A1選択ボタン
A4選択ボタン
挿入した図ボタン
このうち、まずは、前回が、
スクショ画像の処理
だったので、その続きで、
■挿入した図ボタンを作ろう
スクリーンショット画像は、
PrtScキー
Windows+Shiftキー+Sキー
のいずれかで、スクリーンショットした画像を貼った後の操作だったんだけど、この操作だけだと、実は
ファイル全体の容量が重くなる
ので、テストの現場だと
Edgeのスクリーンショット機能

出てくるメニューのコイツ
なんかで、ページ全体をキャプチャして

保存ボタンをクリック

クリックするとダウンロードフォルダにダウンロードされた

ダウンロードフォルダにダウンロードされた画像ファイルは保存されているので、

そいつをExcelで、挿入タブ>画像>セルの上に配置>このデバイスの順でクリック

さっきダウンロードした画像を選んで、挿入ボタンをクリック

で、画像が挿入されるんだけど、、、

このままだと、前回までの図と書式設定を見比べると


と、
(前回までの)高さ:12.19 cm → (今回の)高さ:27.94 cm
(前回までの)幅:21.68 cm → (今回の)幅:13.3 cm
(前回までの)高さの倍率:60% → (今回の)高さの倍率:41%
(前回までの)幅の倍率:60% → (今回の)幅の倍率:41%
と合っていないので、まずは試しに手作業で
今回の倍率を前回までの図に合わせて、60%に変更してみる
と、図を比較してみると、前回までとは明らかに違うサイズになっていることが分かる(同じnoteのポータルサイトなのに👀💦)


なので、いったん倍率は41%に戻して、高さと幅を
(前回までの)高さ:12.19 cm
(前回までの)幅:21.68 cm
に合わせてみると、、、

縦横比を固定に✓しているので~~~

=幅に合わせて
倍率も自動調整

前回までの図と横幅がそろった上に、今回の図の一番下は


なので、マクロの記録で今やった
画像の高さと幅に入力する操作をやって記録を終了するだけ~~~
①マクロの記録
図の挿入したところまで一旦、戻して

開発タブ>マクロの記録をクリック

何も変えずに、右下のOKボタンだけクリック

高さと幅を入力して、図のサイズが変わったのを確認だけしたら、左上の記録の終了をクリック

②VBE画面でコードを確認
前回までで紹介した開発タブ>VisualBasicをクリックでVBE画面を開くと、プロジェクトエクスプローラーに、Module2が追加されてるので、そいつをダブルクリック

コードの画面で、マクロの記録で自動で入力されたコードを確認

③余計なコードを削除
今回も余計なコメント行を削除
・変更前
Sub Macro1()
'
' Macro1 Macro
'
'
Selection.ShapeRange.Height = 345.5433070866
Selection.ShapeRange.Width = 614.5511811024
End Sub
・変更後
Sub Macro1()
Selection.ShapeRange.Height = 345.5433070866
Selection.ShapeRange.Width = 614.5511811024
End Sub
てな感じ。
④③のコードを切り取って、エビデンス採取ツールフォームに貼り付け
ここは前回で流れは詳しくやってるので、結果だけ

⑤フォーム画面を開いて、コマンドボタンを追加し、今追加したマクロ名を変更の上、Callで呼び出し
ここは前回で流れは詳しくやってるので、ポイントだけ


Sub 挿入した図のサイズを変更()
Selection.ShapeRange.Height = 345.5433070866
Selection.ShapeRange.Width = 614.5511811024
End Sub
てな感じにSubプロシージャ名を変更して
Private Sub 挿入した図ボタン_Click()
Call 挿入した図のサイズを変更
End Sub

⑥手作業と同じ結果になるか検証
さっきと同じダウンロードしたスクショ画像を、下にもうひとつ貼って

前回と同じ操作で、ユーザーフォームを開き、追加したボタンをクリック


ハイ、同じ結果になりました( ´∀` )
ここでポイント①:別の画像をもうひとつ取って、期待した結果になるか検証しとく
例えば、Edgeで新しいタブをもうひとつ追加

同じ操作でスクリーンショットしてダウンロード

さっきの画像の下に今の図を挿入すると、

図の書式設定が、さっきと違う

で、ユーザーフォームでさっきのボタンをクリックしてみると

プロパティを見ると、

って、一瞬思うんだけど、、、Excelを少し上にすると

👉問題なし💃
何度もゆーてるが、
マクロ=操作を自動化する
なので、
1回検証した操作が他でも同じように実現するか
👉他でも大丈夫と決めつけず=思い込まずに、
いくつかのパターンで早めに検証する
が、
安全なVBA開発の基本
なんで、
きちんと複数のパターンで検証してな
試しに、もう一回今度は適当にスクショでやった画像でさっきのマクロをユーザーフォームから実行しても、

同じ結果になったので~~~問題なし( ´∀` )
と、ここまでの操作で皆さん、
今、追加した図に黒枠がないので見にくい
と思ってると思うので、操作に戻って~~~
⑦黒枠と埋込処理をボタンに追加しとこう
さっきまでのマクロ
Private Sub 挿入した図ボタン_Click()
Call 挿入した図のサイズを変更
End Sub
に、

コードをコピーして、

貼り付け

Private Sub 挿入した図ボタン_Click()
Call 挿入した図のサイズを変更
Call 黒枠
Call 埋込
End Sub
で、追加した画像は削除して、また、図を挿入しなおして、ユーザーフォームから実行




てな感じ( ´∀` )
ここの操作自体は完了したけど、
ここでポイント②:高さと幅が入力した値と、コードで起こした値が違うくない👀❓
が疑問だと思うので、この原因は
Sub 挿入した図のサイズを変更()
Selection.ShapeRange.Height = 345.5433070866
Selection.ShapeRange.Width = 614.5511811024
End Sub
オイラが入力した
(前回までの)高さ:12.19 cm
(前回までの)幅:21.68 cm
で書いたとおりcmなんだけど、VBAはコードに起こすとき、
cmではなく、ポイント(1/72インチ)
👉1ポイント=約0.35mm
で自動変換するからなんだよね👀💦
(345.5433070866 × 0.35) ÷ 10
なんかでやると、ほぼ誤差くらいcmになってると思うので( ´∀` )
で、ここで忘れてほしくないのが、そもそもこのツールの目的はあくまでも、
テスト作業の際にエビデンス採取作業を捗らせること
であって、別に
小数点第1位まで正確な数値で検算することではない
ってことを思い出してね👀💦
※だったらもっと他のやり方でやるっつーの( ´∀` )
では、次の操作
■A1選択ボタンを作ろう
と、ここまで画像をペタペタとエビデンスファイルに貼ってくると次に面倒くさいのが、

一番最初の行に戻るときに、いちいちスクロールバーで戻らないといけない事なんだよねえ👀💦
これが、1回ならいいんだけど、テスト中には頻繁に発生するし、テストだと、3000~5000行くらいまで画像が続くのはザラだし👀💦
なので、
A1に一発で戻るボタンをよく使ってる
①マクロを記録
開発タブ>マクロの記録をクリック

OKボタンをクリック

上までスクロールして、

A1セルを選んだら、記録の終了をクリック

②余計なコードを消す
VBE画面でModule2をダブルクリックして、今、記録したMacro2てマクロを見ると( ゚Д゚)すると思うんだけど

Option Explicit
Sub Macro2()
'
' Macro2 Macro
'
'
ActiveWindow.ScrollRow = 325
ActiveWindow.ScrollRow = 324
ActiveWindow.ScrollRow = 322
ActiveWindow.ScrollRow = 319
ActiveWindow.ScrollRow = 316
ActiveWindow.ScrollRow = 312
ActiveWindow.ScrollRow = 309
ActiveWindow.ScrollRow = 304
ActiveWindow.ScrollRow = 298
ActiveWindow.ScrollRow = 294
ActiveWindow.ScrollRow = 290
ActiveWindow.ScrollRow = 287
ActiveWindow.ScrollRow = 282
ActiveWindow.ScrollRow = 279
ActiveWindow.ScrollRow = 273
ActiveWindow.ScrollRow = 270
ActiveWindow.ScrollRow = 266
ActiveWindow.ScrollRow = 263
ActiveWindow.ScrollRow = 258
ActiveWindow.ScrollRow = 254
ActiveWindow.ScrollRow = 251
ActiveWindow.ScrollRow = 246
ActiveWindow.ScrollRow = 242
ActiveWindow.ScrollRow = 237
ActiveWindow.ScrollRow = 233
ActiveWindow.ScrollRow = 229
ActiveWindow.ScrollRow = 223
ActiveWindow.ScrollRow = 219
ActiveWindow.ScrollRow = 214
ActiveWindow.ScrollRow = 209
ActiveWindow.ScrollRow = 205
ActiveWindow.ScrollRow = 201
ActiveWindow.ScrollRow = 196
ActiveWindow.ScrollRow = 191
ActiveWindow.ScrollRow = 187
ActiveWindow.ScrollRow = 184
ActiveWindow.ScrollRow = 178
ActiveWindow.ScrollRow = 174
ActiveWindow.ScrollRow = 170
ActiveWindow.ScrollRow = 166
ActiveWindow.ScrollRow = 162
ActiveWindow.ScrollRow = 158
ActiveWindow.ScrollRow = 153
ActiveWindow.ScrollRow = 150
ActiveWindow.ScrollRow = 146
ActiveWindow.ScrollRow = 139
ActiveWindow.ScrollRow = 135
ActiveWindow.ScrollRow = 132
ActiveWindow.ScrollRow = 129
ActiveWindow.ScrollRow = 124
ActiveWindow.ScrollRow = 119
ActiveWindow.ScrollRow = 115
ActiveWindow.ScrollRow = 111
ActiveWindow.ScrollRow = 107
ActiveWindow.ScrollRow = 104
ActiveWindow.ScrollRow = 101
ActiveWindow.ScrollRow = 95
ActiveWindow.ScrollRow = 92
ActiveWindow.ScrollRow = 89
ActiveWindow.ScrollRow = 85
ActiveWindow.ScrollRow = 82
ActiveWindow.ScrollRow = 79
ActiveWindow.ScrollRow = 75
ActiveWindow.ScrollRow = 72
ActiveWindow.ScrollRow = 69
ActiveWindow.ScrollRow = 65
ActiveWindow.ScrollRow = 62
ActiveWindow.ScrollRow = 59
ActiveWindow.ScrollRow = 55
ActiveWindow.ScrollRow = 53
ActiveWindow.ScrollRow = 50
ActiveWindow.ScrollRow = 47
ActiveWindow.ScrollRow = 45
ActiveWindow.ScrollRow = 43
ActiveWindow.ScrollRow = 40
ActiveWindow.ScrollRow = 38
ActiveWindow.ScrollRow = 36
ActiveWindow.ScrollRow = 33
ActiveWindow.ScrollRow = 32
ActiveWindow.ScrollRow = 30
ActiveWindow.ScrollRow = 27
ActiveWindow.ScrollRow = 25
ActiveWindow.ScrollRow = 24
ActiveWindow.ScrollRow = 22
ActiveWindow.ScrollRow = 20
ActiveWindow.ScrollRow = 19
ActiveWindow.ScrollRow = 18
ActiveWindow.ScrollRow = 16
ActiveWindow.ScrollRow = 15
ActiveWindow.ScrollRow = 14
ActiveWindow.ScrollRow = 12
ActiveWindow.ScrollRow = 10
ActiveWindow.ScrollRow = 9
ActiveWindow.ScrollRow = 8
ActiveWindow.ScrollRow = 7
ActiveWindow.ScrollRow = 6
ActiveWindow.ScrollRow = 5
ActiveWindow.ScrollRow = 3
ActiveWindow.ScrollRow = 2
ActiveWindow.ScrollRow = 1
Range("A1").Select
End Sub
てな感じ( ´∀` )
ここでポイント③:マクロの記録中は記録したい操作のみを行う=余計な操作をしない
これは、この例を見せるために敢えてやったんだけど、前回、
マクロの記録=操作の録画
ってイメージてゆーたとおり、オイラが記録後に、上まだ戻すのに、スクロールをやったから( ´∀` )
👉余計な操作まで全部、コードに起こしちゃってるだけ
なので、余計なコードとしては、
Range("A1").Select
だけなので~~~


Sub Macro2()
Range("A1").Select
End Sub
てな感じで余計なコードを消しちゃえばいいだけ💃
で、ここまで出来たら
③ユーザーフォームにコマンドボタンを追加
さっきと同じで、ボタンを追加と行きたいところなんだけど、別に前々回の説明で用意したボタンが3つも残ってるので~~~

真ん中のボタンあたりを、プロパティウィンドウで

変更

④コマンドボタンをダブルクリックして、②のコードを貼り付け

ダブルクリックして、

コードが開いて、コードが追加されたのを確認したら、左側のプロジェクトエクスプローラーのModule2

をダブルクリックして、さっきのコードを切り取り

エビデンス採取ツールを右クリックして、コードを表示

開いたコード編集画面に切り取ったコードを追記するだけ

で、Macro2になってる名前を
・変更前
Sub Macro2()
Range("A1").Select
End Sub
・変更後
Sub A1選択()
Range("A1").Select
End Sub
てな感じで変更

⑤コマンドボタンのコード内でCallステートメントで追加したマクロを呼び出す
後は、
Private Sub A1選択ボタン_Click()
Call A1選択
End Sub
てな感じで、処理を呼び出して

ユーザーフォームを開いて、A1選択ボタンをクリック

すると、ユーザーフォームの背景でA1セルに移動してるのが分かる💃

ついでに

のテストケースしかないシートだと、
3行目まででウィンドウ表示が固定

さっきのA1選択ボタンをクリックしても

固定された領域の一番上まで戻ってくれないので~~~
A4セルを選択するボタンを追加しとこう
■A4選択ボタンを作ろう
ここについては、既にベースとなるA1選択ボタンのコードがあるので、
①A1選択Subのコードをコピー

②すぐ下の行に貼り付け

③Subプロシージャ名をA4選択に変更して、処理コードの一部をを変更
・変更前
Sub A1選択()
Range("A1").Select
End Sub
・変更後
Sub A4選択()
Range("A4").Select
End Sub

④エビデンス採取ツールにA4選択コマンドボタンを作って、ダブルクリック
プロジェクトエクスプローラーのエビデンス採取ツールをダブルクリック

ユーザーフォームが開くので、A1選択ボタンの下のコマンドボタンを1回だけクリックして選ぶ

左下のプロパティウィンドウを

変更出来たら、同じボタンを今度はダブルクリック

新しくコードが追加されたのを確認

⑤コマンドボタンのコード内でCallステートメントで追加したマクロを呼び出す
あとは、いつもと同じ流れでさっき作ったA4選択Subを修正
Private Sub A4選択ボタン_Click()
Call A4選択
End Sub

⑥きちんと動くかExcel画面でユーザーフォームを開いて実行


ハイ、完了( ´∀` )
ここでポイント④:こんなのジャンプ機能か手で動かせばよくない❓👀
たしかにExcelの左上にある、ジャンプ機能で、

A322とか入力してみると

ジャンプは出来なくはないんだけど、それって、
いちいち、毎回①ジャンプのところにマウスの矢印を持ってくる②A1とかA4って入力③Enterキーを押さないといけない=3つの操作をやらないといけない👉塵も積もればで時間が勿体ない
入力ミスをしたらどうする👀❓💦👉他の作業で結構頭疲れてたり、焦ってたりするよ👀💦
ジャンプ機能を皆が知ってるわけではない=知らない人がいたり、忘れていたらどうする👀❓💦
ってのがあるので、
誰でもそのボタンを押すだけにしとけば、
必ずA1やA4に移動できる
👉時間短縮になる
一歩前へ:マクロの最大の敵は、「〇〇すればいい。」、「〇〇でやればいい」が最大の敵
ここが結構重要なんだけど、テスト作業にかかわらず、開発工程全般で、
「〇〇すればいい。」、「〇〇でやればいい」
で、簡単か単純な操作は手作業でやらせて、Excelの機能を知らない人やミスをする人が悪い。VBAでマクロを組むのは、
完全に自動化できるモノ
複雑な計算や大量のデータの読み込みなど、人が手作業でやるのが大変
複雑で難しいコードを書く処理
のいずれか全部でしかマクロを組まない、組んでいないって組織は多い。
その結果、マクロを組めば、時間短縮出来る操作に時間がかかり、スケジュールがひっ迫し、、、、って感じになってるところが多いんだよねえ( ´∀` )
全ての人間に共通する最たる欠点は、
反復ストレス症候群:簡単か難しいかにかかわらず、同じ作業を延々と繰り返されると、精度が落ち、ミスが発生する
があるから、
完全自動化できるか=作業の最初から最後まで規則性があるか
簡単か難しいか
手作業でやるのが大変か
って視点だけで、
マクロを使う使わないかを判断
すると、殆どの作業なんてそうじゃないモノ=間に人間の確認や判断入る作業が殆どだし、
「手で動かせるものは、作業者が手でやればいい」
で済ませてしまうと、
短縮できる時間も短縮できない
減らせるはずのミスが減らない=手戻りが増え続ける
ってことになるからね。
そのため、この連載を書き始める前にお断りしてるとおり、あくまでも
小回りの利くツール
てゆーてるからね。
もう一歩前へ:作業をマクロ化する本当の判断基準は、
誰でも共通してやる操作か
その操作が作業全体を通じて、何十回も頻繁に行われる操作か(反復ストレス症候群)
操作が簡単か難しいかではなく、作業全体の量として、重たいか軽いか
部分的な規則性がある操作か
なんだよねえ( ´∀` )まあ、優等生タイプな自称さんほど、
マクロ=自動化=完全自動化
って教科書通りに鵜呑みにして、即断即決で思い込んで
完全自動化できる機能だけに限定して、読みにくい複雑で小難しいコードを書くことだけは出来ても、
本当はもっとマクロ化すれば、時間短縮も手戻りも減る作業を置き去りにして、今日もスケジュールがひっ迫して現場が炎上してるのはなぜかは考えないってゆーね( ´∀` )
ほら、ここまでゆーと、
「〇〇すればいい。」、「〇〇でやればいい」が最大の敵
って言葉が違って聞こえてくるんじゃないかな👀❓
もう一歩前へ:A1セルを選択するのは、確認する人への思いやり
テストエビデンスを採取した後でも、資料を作成した後でも、必ず発生するのが、
提出後の確認担当者によるチェック作業
なんだよね。これも人によっては、
そんなのは毎回、確認担当者が上とか右にスクロールして動かせばいい
で、


では、どっちの方が確認者は
どこから確認すればいいかが分かる
👉見落としが減る
ひとつにシートが40〜50シートあるエビデンスファイルが、10〜20個てなると、スクロール1回なら1秒だとしても、
✖️50✖️20=1000秒=16分
👉時間短縮出来る=他のことに時間が使える
だろうね❓
結局全ては、
人間は機械でもロボットでもないので、べき論とか精神論で片づけるより、
他の作業者や確認者への思いやり
なんだよね( ´∀` )
と気づけば今回も、
既に11000字を突破したのと、ちょうど区切りが良いので、
今回はここまで
さてと、次回は
マクロの記録だけで出来る機能の最後で、以下の3つをやってくや( ´∀` )
書式ボタン
シート追加ボタン
行の高さボタン
続きは、また次回
今回の関連記事
以下は、GoogleAppsScriptの記事ではあるけど考え方は同じなので~~~
違うプログラミング言語でも通じる考え方なんだ👀💦
ってだけ思ってもらえたら幸い💃