見出し画像

【VBA✖テストエンジニアリング3】エビデンス採取ツール(実際にどこの現場でも個人的に開発して使ってるツール)の作りかた③~結局、誰かへの思いやり

さてと、前回

で、

マクロの記録の基本的な作法

は紹介したので、その続き。
同じ手法で作れる機能をどんどん組み込んでいこう💃
その前に、この連載で通底する考え方を列挙しとくや( ´∀` )

(開発現場における)VBAの鉄則

  1. コードの8割はマクロの記録で、Excelに書かせる(👉開発現場は学校のお勉強じゃない。開発現場に「マクロの記録は邪道」なんて存在しない)

  2. 小さく作って、大きく動かす(一度書いたコードは再利用する)

  3. 手で動かして、出来ないことは基本、コードでも出来ないし、やらない方が良い(小難しい機能はバグと改修コストになるので)

  4. グローバルに変数や引数は定義する(同じものはひとつにまとめた方が管理が楽)

  5. 関数こそ最強のAPI(👈今回のツールでは関係ないので、やらない)

  6. 「〇〇すればいい。」、「〇〇でやればいい」が最大の敵

ここまでの関連記事

☆基本的な流れ

1、マクロの記録でマクロを起こす

2、マクロの余計なコードを消す

3、ユーザーフォームにコマンドボタンを追加する

4、編集したマクロをユーザーフォームに追加する

5、コマンドボタンのコード内でCallステートメントで追加したマクロを呼び出す

んだば、早速


このツール全体の機能リスト

◆シート・セルの操作フレーム

  1. 書式ボタン

  2. シート追加ボタン

  3. シート番号入力ボタン

  4. 行追加ボタン

  5. 行の高さボタン

  6. A1選択ボタン👈今回やる

  7. A4選択ボタン👈今回やる

◆図の操作フレーム

  1. 手順番号ボタン

  2. 手順番号入力ボタン

  3. 黒枠縮小のみボタン=前回で紹介済

  4. スクショ画像ボタン=前回で紹介済

  5. 挿入した図ボタン👈今回やる

  6. 吹き出しボタン

  7. 赤枠ボタン

  8. 折れ線ボタン

  9. 右矢印ボタン

  10. 下矢印ボタン

◆シートリストフォーム

  1. シート数ラベル

  2. シート数カウントラベル

  3. シート名リスト

てな感じなので、今回やるところをまとめると、

  1. A1選択ボタン

  2. A4選択ボタン

  3. 挿入した図ボタン

このうち、まずは、前回が、

スクショ画像の処理

だったので、その続きで、

■挿入した図ボタンを作ろう

スクリーンショット画像は、

  • PrtScキー

  • Windows+Shiftキー+Sキー

のいずれかで、スクリーンショットした画像を貼った後の操作だったんだけど、この操作だけだと、実は

ファイル全体の容量が重くなる

ので、テストの現場だと

Edgeのスクリーンショット機能

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選択ボタンな

すると、ユーザーフォームの背景で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の左上にある、ジャンプ機能で、

A1って書いてるところな( ´∀` )

A322とか入力してみると

てな感じで

ジャンプは出来なくはないんだけど、それって、

  1. いちいち、毎回①ジャンプのところにマウスの矢印を持ってくる②A1とかA4って入力③Enterキーを押さないといけない=3つの操作をやらないといけない👉塵も積もればで時間が勿体ない

  2. 入力ミスをしたらどうする👀❓💦👉他の作業で結構頭疲れてたり、焦ってたりするよ👀💦

  3. ジャンプ機能を皆が知ってるわけではない=知らない人がいたり、忘れていたらどうする👀❓💦

ってのがあるので、

誰でもそのボタンを押すだけにしとけば、
必ずA1やA4に移動できる
👉時間短縮になる

一歩前へ:マクロの最大の敵は、「〇〇すればいい。」、「〇〇でやればいい」が最大の敵

ここが結構重要なんだけど、テスト作業にかかわらず、開発工程全般で、

「〇〇すればいい。」、「〇〇でやればいい」

で、簡単か単純な操作は手作業でやらせて、Excelの機能を知らない人やミスをする人が悪い。VBAでマクロを組むのは、

  • 完全に自動化できるモノ

  • 複雑な計算や大量のデータの読み込みなど、人が手作業でやるのが大変

  • 複雑で難しいコードを書く処理

のいずれか全部でしかマクロを組まない、組んでいないって組織は多い。
その結果、マクロを組めば、時間短縮出来る操作に時間がかかり、スケジュールがひっ迫し、、、、って感じになってるところが多いんだよねえ( ´∀` )

全ての人間に共通する最たる欠点は、

反復ストレス症候群:簡単か難しいかにかかわらず、同じ作業を延々と繰り返されると、精度が落ち、ミスが発生する

があるから、

  • 完全自動化できるか=作業の最初から最後まで規則性があるか

  • 簡単か難しいか

  • 手作業でやるのが大変か

って視点だけで、

マクロを使う使わないかを判断

すると、殆どの作業なんてそうじゃないモノ=間に人間の確認や判断入る作業が殆どだし、

「手で動かせるものは、作業者が手でやればいい」

で済ませてしまうと、

  • 短縮できる時間も短縮できない

  • 減らせるはずのミスが減らない=手戻りが増え続ける

ってことになるからね。
そのため、この連載を書き始める前にお断りしてるとおり、あくまでも

小回りの利くツール

てゆーてるからね。

もう一歩前へ:作業をマクロ化する本当の判断基準は、

  • 誰でも共通してやる操作か

  • その操作が作業全体を通じて、何十回も頻繁に行われる操作か(反復ストレス症候群)

  • 操作が簡単か難しいかではなく、作業全体の量として、重たいか軽いか

  • 部分的な規則性がある操作か

なんだよねえ( ´∀` )まあ、優等生タイプな自称さんほど、

マクロ=自動化=完全自動化

って教科書通りに鵜呑みにして、即断即決で思い込んで
完全自動化できる機能だけに限定して、読みにくい複雑で小難しいコードを書くことだけは出来ても、
本当はもっとマクロ化すれば、時間短縮も手戻りも減る作業を置き去りにして、今日もスケジュールがひっ迫して現場が炎上してるのはなぜかは考えないってゆーね( ´∀` )
ほら、ここまでゆーと、

「〇〇すればいい。」、「〇〇でやればいい」が最大の敵

って言葉が違って聞こえてくるんじゃないかな👀❓

もう一歩前へ:A1セルを選択するのは、確認する人への思いやり

テストエビデンスを採取した後でも、資料を作成した後でも、必ず発生するのが、

提出後の確認担当者によるチェック作業

なんだよね。これも人によっては、

そんなのは毎回、確認担当者が上とか右にスクロールして動かせばいい

で、

シートの最後
シートの最初

では、どっちの方が確認者は

どこから確認すればいいかが分かる
👉見落としが減る
ひとつにシートが40〜50シートあるエビデンスファイルが、10〜20個てなると、スクロール1回なら1秒だとしても、

✖️50✖️20=1000秒=16分

👉時間短縮出来る=他のことに時間が使える

だろうね❓

結局全ては、

人間は機械でもロボットでもないので、べき論とか精神論で片づけるより、

他の作業者や確認者への思いやり

なんだよね( ´∀` )

と気づけば今回も、

既に11000字を突破したのと、ちょうど区切りが良いので、

今回はここまで

さてと、次回は

マクロの記録だけで出来る機能の最後で、以下の3つをやってくや( ´∀` )

  • 書式ボタン

  • シート追加ボタン

  • 行の高さボタン

続きは、また次回

今回の関連記事

以下は、GoogleAppsScriptの記事ではあるけど考え方は同じなので~~~

違うプログラミング言語でも通じる考え方なんだ👀💦

ってだけ思ってもらえたら幸い💃

いいなと思ったら応援しよう!