
【VBA✖テストエンジニアリング9】エビデンス採取ツール(実際にどこの現場でも個人的に開発して使ってるツール)の作りかた⑧(ラスト)~結局は、全てデザインとひらめきで決まる👉あらゆるコストを削減する、使いやすいツールは自分たちで作る。
さてと、前回
で、
エビデンス採取ツール
の方は機能を全部組み込んだので、今回は、
シートリストの説明(多分、実際にはすっげえあっさりでびっくりすると思う)
イベント
ユーザーフォームのレイアウト直し=デザイン
なんかの紹介に入ってく💃
機能一覧
◆シート・セルの操作フレーム
書式ボタン:済
シート追加ボタン:済
シート番号入力ボタン:済
行追加ボタン:済
行の高さボタン:済
A1選択ボタン:済
A4選択ボタン:済
◆図の操作フレーム
手順番号ボタン:済
手順番号入力ボタン:済
黒枠縮小のみボタン:済
スクショ画像ボタン:済
挿入した図ボタン:済
吹き出しボタン:済
赤枠ボタン:済
折れ線ボタン:済
右矢印ボタン:済
下矢印ボタン:済
◆シートリストフォーム
シート数ラベル👉今回
シート数カウントラベル👉今回
シート名リスト👉今回
残り3つ👀💦
(開発現場における)VBAの鉄則(前回までから追記)
コードの8割はマクロの記録で、Excelに書かせる(👉開発現場は学校のお勉強じゃない。開発現場に「マクロの記録は邪道」なんて存在しない)
小さく作って、大きく動かす(一度書いたコードは再利用する)
手で動かして、出来ないことは基本、コードでも出来ないし、やらない方が良い(小難しい機能はバグと改修コストになるので)
グローバルに変数や引数は定義する(同じものはひとつにまとめた方が管理が楽)
関数こそ最強のAPI(👈今回のツールでは関係ないので、やらない)
「〇〇すればいい。」、「〇〇でやればいい」が最大の敵
なるべく早めに検証し、リファクタリングまで行う(エンジニア業界の「後からはいつまでも来ない」)
一度、コード化した同じ処理を2度書かない(再利用)
シンプルイズビューティフル
※記事の内容に合わないものを一気に列挙しても、混乱するだけなんで書かなかっただけ~~~( ´∀` )
ここまでの関連記事
☆基本的な流れ(前回までから追記)
1、マクロの記録でマクロを起こす
↓
2、マクロの余計なコードを消し、コードを編集する。
↓
3、ユーザーフォームにコマンドボタンを追加する
↓
4、編集したマクロをユーザーフォームに追加する
↓
5、コマンドボタンのコード内でCallステーメントで追加したマクロを呼び出す
↓
6、期待どおりに動くか検証
↓
7、リファクタリングする
で、これまでの機能はやってきたんだけど(てか、9割がたのすぐに必要な機能はこれで作れる)、前回の行追加ボタンや図の圧縮ボタン同様、コードやVBAの操作がないと作れない機能に入ってく💃
ま、実は、この短期集中連載の流れとしては、
マクロの記録で作りたい機能で作れるモノのコードを起こしながら、VBAの基本に慣れる
↓
一部コードを改修する方法で、コードを編集する感覚を掴む
↓
VBAの操作メインでしか作れない機能に触れる
てな感じで、VBAに全く触れたことのない人でも、
徐々にVBAに慣れてもらう
👉VBAの概念モデル
を段階を追って理解してもらえるかなあって順番で、
普段のExcelの手作業でよくやる身近な操作
をマクロの記録でマクロを起こしながら
進んでいただけ( ´∀` )
ではでは、今回も本編( ´∀` )
■エビデンス採取ツールのレイアウトを直そう=デザイン
シートリストの説明に入る前に、さすがに、

Excelが操作しにくい(画面いっぱいに
隠れちゃってるもん👀💦)
ので、エビデンス採取ツールの編集画面を開いて~~~


ボタンやフレームを移動させながら、高さや幅、並び順を揃えてく
ここでポイント①:高さは24以上にした方が使いやすい
別に自動調整機能を使って

に出来なくはないんだけど

ボタンの高さが小さいとさらにそこで文字自体も小さいので見にくい👀💦
👉使いにくいので使わない人
ボタンを押し間違える人
が出てくる
なので、幅は別に、表示するCaptionの文字に少し余白があるくらいの幅で良いんだけど、高さは24以上にしとくと無難
てことでさらに作業を進めると、

プロパティウィンドウのFontの右横の…をクリックして、Captionのフォントを調整して~~

プロパティウィンドウのStartUpPositionが、オーナーフォームの中央になっているので、手動に変更

Topが0なんで10に変更


Leftも0になっているので10に変更


Excelに戻ってユーザーフォームを開くと、

ここでポイント②:デュアルディスプレイで、ディスプレイ設定を特殊にしてる場合は
ユーザーフォームの高さ(Height)と幅(Width)が可変で大きくなったり小さくなったりすることが多いので~~~


を、ユーザーフォームを開く度に固定できるように

Sub エビデンス採取ツールを開く()
エビデンス採取ツール.Show
End Sub
のコードを
Sub エビデンス採取ツールを開く()
エビデンス採取ツール.Show
エビデンス採取ツール.Height = 94.5
エビデンス採取ツール.Width = 840
End Sub
って感じで明示的に固定してあげると、可変的な調整を防げる💃
ただし、ユーザーフォームを今後大きさ変えたときはそこに合わせて、ここの数字も変更が必要なので気を付けてね( ´∀` )
さてと、ひとつ上のModule1も使わないので解放して~~

エビデンス採取ツールのお色直し完了💃

じゃあ次に、シートリストフォームを作ってく
■シートリストを作ろう
◆作成手順
新しいユーザーフォームを追加
オブジェクト(部品)を配置
オブジェクトに対応したコードを組み込む
エビデンス採取ツールから開けるようにする👈イベントを利用する
これだけ。んだば、早速
①新しいユーザーフォームを追加
左上の挿入>ユーザーフォームの順にクリック


②オブジェクト(部品)を配置
出てきたユーザーフォームを、オブジェクトが配置しやすいように引き伸ばし、

ツールボックスのラベル

をコマンドボタンやフレームなんかを配置した方法で、ユーザーフォームの一番上にふたつ配置

オブジェクト名を
左側のラベル:シート数ラベル
右側のラベル:シート数カウントラベル
で変更



その下に、リストボックスを追加


白だと味気ないので、背景色を薄い黄色に変更
👉エビデンス採取ツールのユーザーフォームの背景を変更した要領で、



オブジェクト名もListBox1になったままなので
シート名リスト
に変更


ユーザーフォームもUserForm1になっているので、ユーザーフォームを選んで、


これで必要な部品の配置完了💃
③オブジェクトに対応したコードを組み込む
完成品のコードを見せた方が理解が早いと思うので
Option Explicit
Dim WS As Worksheet
Private Sub UserForm_Initialize()
For Each WS In Worksheets
If WS.Visible = True Then
シート名リスト.AddItem (WS.Name)
End If
Next WS
シート数カウントラベル.Caption = Sheets.Count
End Sub
Private Sub シート名リスト_Change()
Worksheets(シート名リスト.Value).Select
End Sub
なんだけど、まずは、シートリストフォームのコードを表示


左上のオブジェクトリストからUserFormを選ぶ

自動的に、Clickのコードが追加される

いったんそのまま、右上のイベントリストから、Initializeを選ぶ


さっきのClickのコードは使わないので、削除

ワークシートオブジェクト変数を定義
Dim WS As Worksheet
シートリストフォームが開いたら、シート名リストボックスに、Excelファイル内の全シート名が表示されるようにするので、
Excelファイル内のシートの名前を繰り返し取得して、シート名リストボックスに追加するように
For Each WS In Worksheets
If WS.Visible = True Then
シート名リスト.AddItem (WS.Name)
End If
Next WS
このコードを追記

ここで一度、左上にある緑の▶ボタンをクリックして、実行

してみると、

ただし、モーダルで動かせない初期設定になったままなので、


同じ方法で再度実行すると

シート名をクリックしても

チェンジイベントで、リスト項目が変わったら選ばれたシートに切り替わるようにコード追加
さっきと同じ要領で、



Private Sub シート名リスト_Change()
Worksheets(シート名リスト.Value).Select
End Sub
てな感じでコードを追加して、再度実行すると、、、

QAをクリック

リストの上から3番目No1をクリックすると、

これだとまだ、シート数が表示されてないので、さっきのInitializeイベントの方に
シート数カウントラベル.Caption = Sheets.Count
を追加

再度実行すると、

ラベルの文字なんかが寂しいので、お色直しと同じやり方で


てな感じで設定して、再実行すると

表示位置が真ん中になってるんで、ここもさっきのお色直しと同じ要領で

実行してみると

この状態で、エビデンス採取ツールを開くと

シートリストフォームのLeftを860に変更

実行すると、かぶらなくはなってるんだけど、字切れちゃってるので~~~



後は、字切れちゃんの幅を調整

④エビデンス採取ツールから開けるようにする👈イベントを利用する
じゃ、後はエビデンス採取ツールから開けるように~~~
エビデンス採取ツールフォームの右端を少し広げて、ダブルクリック



されたけど、右上のイベントリストからDblClick(ダブルクリック)イベントを選ぶ


Private Sub UserForm_Click()
End Sub
このコードは要らないから削除
Private Sub UserForm_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
シートリストフォーム.Show
End Sub
てな感じのコードにして、実行

エビデンス採取ツールが開くので、右端の黄色いところをダブルクリック

ただし、今のままだと開くだけなので、ダブルクリックする度に、
一旦、シートリストを閉じてから開きなおす
にしてあげると、


コードとしては、
Private Sub UserForm_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
シートリストフォーム.Show
End Sub
に
Unload シートリストフォーム
を追記して、
Private Sub UserForm_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Unload シートリストフォーム
シートリストフォーム.Show
End Sub
てな感じにしてあげるだけ( ´∀` )
操作としては以上💃
ここでポイント③:イベントって何👀❓
まあ、例えば、
ボタンをクリックする
ダブルクリックする
マウスの矢印がユーザーフォームの中に入る
マウスの矢印がユーザーフォームの中から出る
みたいな、
ユーザーが何かの操作をしたのをきっかけ(トリガー)に処理を実行する
👉イベント
今回の記事で操作しながら、感覚を身に付けて欲しかったので、イベントの解説は後回しにしてたんだけど、すでに
Initializeイベント
Changeイベント
DblClick(ダブルクリック)イベント
の3つを使ったんだけど、これまでの記事でも既に、コマンドボタンで実はずっと、

Clickイベント
を使ってたんだよねえ( ´∀` )
一歩前へ:なんでエビデンス採取ツールでダブルクリックイベントを使ったの👀❓クリックイベントでもいいのでは👀❓
まあ、別にコマンドボタンで開くようにしても良かったんだけど、

フォームが既にいっぱいな時なんかでボタンを増やせないとき
イベントを使えばボタンを増やさなくていいとき
なんかに、
イベントを使うとかなり便利だから
てのもあるし、敢えてダブルクリックにしてるのは、右端にたまたまマウスの矢印が当たってるときに誤ってクリックしちゃうと、
シートリストが開いちゃうから( ´∀` )
👉まあそれはダブルクリックでも同じなんだけど、頻度は減る( ´∀` )
てな感じでイベントが使えると、かなり便利だからどんなイベントが他にあるかは自分で調べてみてね~~~
もう一歩前へ:ダブルクリック症候群対策
これは以前居た職場でクリックしかしちゃいけないボタンでダブルクリックしちゃった人がいて、すげえ剣幕で怒られてた( ´∀` )
👉今の時代せっかちな人で、
クリック(シングルクリック)と
ダブルクリックの違い
が分かっていない人は多いので、
無意識に、ボタンをダブルクリックしちゃう
=ダブルクリック症候群
※オイラが勝手に命名( ´∀` )
対策で、上手いエンジニアなら、怒る暇があったら、ダブルクリックしちゃいけないコマンドボタンに
Private Sub スクショ画像ボタン_Click()
Call 縮小60パーセント
Call 黒枠
Call 埋込
Call 図を96bpiに圧縮
End Sub
Private Sub スクショ画像ボタン_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
MsgBox ("クリックは1回だけよ")
End Sub
Private Sub 黒枠縮小のみボタン_Click()
Call 縮小60パーセント
Call 黒枠
Call 図を96bpiに圧縮
End Sub
Private Sub 黒枠縮小のみボタン_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
MsgBox ("クリックは1回だけよ")
End Sub
Private Sub 挿入した図ボタン_Click()
Call 挿入した図のサイズを変更
Call 黒枠
Call 埋込
Call 図を96bpiに圧縮
End Sub
Private Sub 挿入した図ボタン_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
MsgBox ("クリックは1回だけよ")
End Sub
てな感じでコードを潜ませておいて

ダブルクリックしたくても出来ないように制御をかけちゃう( ´∀` )
もちろん、これはお遊びの例だけど、
MsgBox ("クリックは1回だけよ")
を外して
Private Sub スクショ画像ボタン_Click()
Call 縮小60パーセント
Call 黒枠
Call 埋込
Call 図を96bpiに圧縮
End Sub
Private Sub スクショ画像ボタン_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
End Sub
Private Sub 黒枠縮小のみボタン_Click()
Call 縮小60パーセント
Call 黒枠
Call 図を96bpiに圧縮
End Sub
Private Sub 黒枠縮小のみボタン_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
End Sub
Private Sub 挿入した図ボタン_Click()
Call 挿入した図のサイズを変更
Call 黒枠
Call 埋込
Call 図を96bpiに圧縮
End Sub
Private Sub 挿入した図ボタン_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
End Sub
ダブルクリックイベントの中身が空欄
👉処理を何もしない
て感じにも出来なくはないんだけど、そうすると、処理を本当にしてないのかが使う人とか管理者には分からないので~~~
どうするかはその時の状況によるかなあ( ´∀` )
まとめ
去年末から始めたコラムを挟んで9回に及んだ
オイラがどこの現場でも使ってるツール
の説明としては以上💃
すっげえ簡単な機能ばかりなんだけど、
これまでの記事で見せたとおり、
シートの移動、追加
書式の設定
図形の挿入
図の挿入
行の追加
などなど。全部手作業でやってる操作をボタン1発で出来るようになれば、ひとつの操作あたり、
数秒~数分の時間が短縮できる
他の作業に時間が使える
他のもっと考えないといけない事の精度や品質が上がる
浮いた時間で、資料なんかの読み物をじっくり読める
美味しいコーヒーが飲める
残業しなくて良くなる
などなど。定量的にも定性的にも効率は上がるし、
作業コスト
管理コスト
品質コスト
と
あらゆるコストが削減できる
んじゃないかな( ´∀` )
しかも、ここで紹介してないような機能で、自分の作業でよく使う機能を他の人も使えるように、自分でツールが組めるようになれば、
依頼コスト
開発コスト
金銭コスト
人件費
残業代
なんかも削減できるんじゃないの❓👀
知らんけど( ´∀` )
ま、おととしの今頃に、オイラのこの
ユーザーフォームを起点にした
マクロツール
を見て、言われたんだけど
・「VBAなんざ簡単で誰でも出来る」
👉オイラは今まで12社以上、色んな開発現場を見てきたけど、こんな簡単だけど効率の上がるツールを元から使っていた現場をみたことないし、作業効率を上げるようにこちらがゼロから職場に入ってから作ってた方( ´∀` )
=VBAがいくら簡単でも、その簡単なツールすら用意してないなら、難しくて作れない人と変わらないし、それでミスもコストも減らないのであれば意味がないのでは?
・「独特なツールですね」
👉いえ。これVBAの資格を持っていて、実践的な使い方を知ってる人なら標準的な使い方ですが、これを逆に独特てゆーのなら、逆にどんな限定された機能だけで、独特な使い方をされてるんですか❓👀使えるのにユーザーフォームを使わないとか逆に相当使いにくくないですか❓👀
と思うたことは内緒にしとく🤫
VBAにしろ、GoogleAppsScriptにしろ、UiPathにしろ
全てのプログラミング言語なんて
今や民主化されたテクノロジーが主流だから
もっと自由で良いし、
こうじゃないといけないなんて
決まりなんざないのに( ´∀` )
ひらめかない人ほど、
決まった教科書どおりの作り方しか出来ずに、
ユーザーさんに余計なストレスを
かけてるってゆー👀💦
簡単であれ、独特であれ、
誰かの役に立てばそれで良くね?🧐
何時間くらいで全部作ったの❓👀
さあ、全部にかかった時間は、図ってないから知らないけど、何かの作業をしていて、
この操作繰り返ししてるなあ
👉マクロ化したろ💃
って感じでひとつの機能ごとに、要るなと思ったら他の作業しながら進めるので、
シートリストでも作ったのは
大体30分もかかってないかなあ
早いものは10分もかからないくらい
で作るからねえ
さてと、最後に
これで全機能まとめてられたので、ユーザーフォームで作る最大の利点を
でも書いたけどもう一度( ´∀` )
ファイルのエクスポート・インポートで他のブックでも使おう
操作は簡単

それぞれ右クリック



このツールを使いたいブックを開いて



後は、名前を付けて保存でマクロ有効ブックとして保存して、

しちゃえば


簡単に別のブックでも同じ機能がすぐに使える
👉持ち運び出来ましたとさ( ´∀` )
さてと、月曜日からまた仕事なので~~~
月曜からもまた必要な機能を作って遊ぼうっと💃
ではでは、また、来週から
UiPathの子に戻ろうっと( ´∀` )
気が向いたら今度は、このツールを使って
確認者が見やすいエビデンスの採取の仕方
「縦横無尽なエビデンスは自分の首を絞める」
でもやろうかな( ´∀` )
年末年始お騒がせしました
後は自分で色々試しながら
作ってみてくださいね~~~
ありがとうございました。
一気に書き続けたんで、
不備や抜けがあったら後で編集します
それが書籍じゃなくて、
WEB記事の最大の利点なんで( ´∀` )
まとめて大系的に学びたい人は、
も用意してるので、覗いてみてね( ´∀` )