見出し画像

【VBA✖テストエンジニアリング4】エビデンス採取ツール(実際にどこの現場でも個人的に開発して使ってるツール)の作りかた④~やっと今回から少し、処理コードを編集( ´∀` )

さてと、前回

で、

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

  1. 書式ボタン

  2. シート追加ボタン

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

  4. 行追加ボタン

  5. 行の高さボタン

  6. A1選択ボタン👈前回

  7. A4選択ボタン👈前回

◆図の操作フレーム

  1. 手順番号ボタン

  2. 手順番号入力ボタン

  3. 黒枠縮小のみボタン👈前々回

  4. スクショ画像ボタン👈前々回

  5. 挿入した図ボタン👈前回

  6. 吹き出しボタン

  7. 赤枠ボタン

  8. 折れ線ボタン

  9. 右矢印ボタン

  10. 下矢印ボタン

◆シートリストフォーム

  1. シート数ラベル

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

  3. シート名リスト

てな感じで5つ終わったので、今回は、マクロの記録のみで作れる機能の最終で

  1. 書式ボタン

  2. シート追加ボタン

  3. 行の高さボタン

をやってく💃

本題に入る前に、この連載で通底する考え方を列挙しとくや( ´∀` )

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

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

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

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

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

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

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

ここまでの関連記事

☆基本的な流れ

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

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

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

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

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

んだば、早速


■行の高さボタンを作ろう

テスト作業時にQA表なんかに書き込むときに、図を備考に貼り付けて、質問したいときなんかに

てな感じ

列の高さは自分で調整すればいいんだけど、

行の高さを調整するのが面倒

なのでよく使う( ´∀` )

見えるギリギリの範囲で
サイズと列幅を自分で
見にくい
右クリック>行の高さ
行の高さ360
と、手作業で変更できなくはない

手でやる操作を書き起こすと

  1. 行の高さを変更した行を選ぶ

  2. 右クリック

  3. 数字を入力

  4. OKボタンを押す

と簡単な操作に見えるが

作業工程が4つあり、
毎回手でやるのは面倒くさい

全部最初から行の高さを大きくしておくことも出来なくはないけど、

てな感じ

毎回、図を挿入しないといけない質問
ばかりではない

ので、

臨機応変に図を挿入したいときだけ、
行の高さを変えた方が便利

行の高さを234に調整した後

では、いつもどおり、基本的な流れで~~~

①マクロの記録でマクロを起こす

開発タブ>マクロの記録

コレな

OKボタンをクリック

右下

適当な行を選ぶ(今回は3行目)

てな感じ

その状態で、右クリック>行の高さをクリック

コレな

行の高さの数字を234など、変えたい数字に変更してOK

行の高さが変わったのが確認出来たら、記録の終了ボタンをクリック

左上の記録の終了ボタン

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

左上のVisualBasicをクリックして、VBE画面を開く

ココな

左側のプロジェクトエクスプローラー>標準モジュールで、今回のマクロが記録されたModuleをダブルクリック

今回は、Module3

コード編集部分で、今回のコードが自動入力されているのを確認

Sub Macro1()
'
' Macro1 Macro
'

'
    Rows("3:3").Select
    Selection.RowHeight = 234
End Sub
てな感じ

余計なコードを消す。
今回は、3行目を選んでるのと、コメント行が要らないので削除

・変更前

Sub Macro1()
'
' Macro1 Macro
'

'
    Rows("3:3").Select
    Selection.RowHeight = 234
End Sub

・変更後

Sub Macro1()
    Selection.RowHeight = 234
End Sub
てな感じ

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

左側のプロジェクトエクスプローラー>エビデンス採取ツールをダブルクリックし、フォーム編集画面を表示

コイツな

3個前の記事で追加したコマンドボタンが余ってるので、前回同様に、そのコマンドボタンを選んで、

コイツな

左下のプロパティウィンドウで、オブジェクト名とCaptionを変更

変更前
変更後
てな感じ

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

Module3をダブルクリックして、コードを再表示

コイツな

さっきのコードを切り取って、

てな感じ

これまでの操作と同じ方法で、行の高さボタンをダブルクリックして、コードを追加して、切り取ったコードを貼り付け

てな感じ

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

後は、ここもいつもの方法で

・変更前

Private Sub 行の高さボタン_Click()

End Sub
Sub Macro1()
    Selection.RowHeight = 234
End Sub

・変更後

Private Sub 行の高さボタン_Click()
    Call 行の高さを変更
End Sub
Sub 行の高さを変更()
    Selection.RowHeight = 234
End Sub

てな感じに変更

⑥他の行でも同じ高さに変更できるかを確認・検証

今回は、ちょっとこのコードの面白さも示すため

4行目以降
最終行まで選択

ユーザーフォームを開いて、行の高さボタンをクリック

行の高さな

見てのとおり、

4行目以降
最終行まで

全部、まとめて選択した範囲の
行の高さを変更できた
💃

ここでポイント①:Selectionは便利

これが実は、マクロの記録で書いたコードが

Sub 行の高さを変更()
    Selection.RowHeight = 234
End Sub

Selection:選択した箇所=複数箇所でもOK

になっているから。コード大好きっこちゃんが教科書どおりに使う

ActiveCellみたいな他のコードだと、1カ所しか選択できないコードもあるから違いに気を付けてね

ここでポイント②:別に行を選択しなくてもOK

ここまでの説明だけ読むと、「いずれも行を選択しないといけないから面倒じゃね❓👀大して便利になってなくね👀❓」って即断即決で思い込む人もいるんだけど

てな感じでC24を選んで、

ユーザーフォームからさっきのボタンをクリックしても

てな感じで

実は、行全体を指定してなくても、

選択した箇所の行の高さを指定した値に変更する

ってコードの書き方を自動でやってくれてるので、

ちょっと何かの作業で、行の高さを広くしたい

なんてときに

ボタンひとつで出来るので
めちゃくちゃ作業がはかどる( ´∀` )

SelectionとActiveCellなんかの違いについては、動かし慣れてる人でもあまり知らなかったり(てか、本によってはSelection自体が出てこなかったりするから)、

便利だし覚えといてね~~~~💃

ここでポイント③:要らなくなったModuleは定期的にモジュールの解放で削除する

マクロの記録でVBAをやってるとどうしても、

Excelが勝手にModuleを追加する

ので、プロジェクトエクスプローラーに

Moduleが増えていく、、、💦

今でもModule1~Module3と既に増えてるので

てな感じ
既に切り取ってるので中身は空白

こんなもん残っていても邪魔なので、要らなくなったら、削除するModuleを右クリック>~の解放をクリック

てな感じ

確認ダイアログが出てくるので

  • どこかのフォルダにモジュールを残したい:はい

  • どこかのフォルダにモジュールを残さなくていい:いいえ

って感じでどちらかのボタンをクリック。

今回はいいえをクリック
削除してすっきり( ´∀` )

一歩前へ:「別に空白=何もない👉何もしてないってプロなら分かるんだから残しておいても問題ないのでは❓👀」

って感じで、残しても問題ないってゆー人や組織も実際に過去見たことがあるんだけど、
空白で今は何もしてないように見えて、これを意図的に残しているのか分からない
👉今後使う予定なのか、現在何かで使ってるのか、何か特殊なことをやってるのかがこれだけだと不明

「設計書とか申し送りに書くからそこ見たら良いじゃん( ´∀` )」

👉こーゆー人に限って、ドキュメントに追記漏れしてるか、そんなことはわざわざ書かなくても分かるから敢えて書かないみたいな人も自称さんでは多い。しかも、

3日後の自分は他人

なので、そーやって追記も記録にも残さない本人が、半年後とかに

なんで、こんな空白のモジュールを
残してんだっけ
❓👀💦

ってなってたりする( ´∀` )

前回もゆーたとおり、プログラミングにも必要なのは

思いやり

👉目先で面倒くさいと思っても、要らなくなったものは早めに削除なんかして

ソース自体をちゃんと整理しておく💃
👉リファクタリング
=転ばぬ先の杖

■書式ボタンを作ろう

このボタンはねえ💦No1のシートの1~2行目を見てもらうと分かるんだけど、

Microsoftさんのセンスのなさ

なのか、シートを追加するとなぜか初期設定で

てな感じで
  • フォント:游ゴシック

  • フォントサイズ:11

にしてんだよねえ( ´∀` )デザインセンスのない人は、読めればいいって感じで、そんなこと気にも留めないし、窓(Windows)信者様に至っては、

さすがMicrosoftさん

って、逆にこの初期設定で統一しろって人まで組織には居たりするんだけど、、、💦

ここでポイント④:人は読みにくいものは読もうとしない(デザインの鉄則)

で、読みにくいものは読もうとしないし、それでも業務で読みにくいものを読もうとすると、

  • 余計なストレスがかかる

  • 読み落としや読み飛ばしが発生する

のが人情ってものなので、大体、どこの職場でも読みやすいって言われる

  • フォント:Meiryo UI

  • フォントサイズ:12

でオイラなら、全シートを統一しちゃう

👉確認者の人が読みやすい方が、
確認まで含めてサクサク作業が進むから

なので、ここでマクロに記録する操作は

  1. 全シートを選択

  2. フォント:Meiryo UI

  3. フォントサイズ:12

  4. ついでに、罫線も非表示の方が見やすいので、罫線なし

の手順( ´∀` )
では、実際に操作

①マクロの記録でマクロを起こす

さっきと同じ感じで、マクロの記録でOKボタンをクリックして、

  1. 全シートを選択

  2. フォント:Meiryo UI

  3. フォントサイズ:12

  4. ついでに、目盛線も表示なしの方が見やすいので、目盛線なし

をやってから記録の終了

てな感じ

②マクロの余計なコードを消す(ついでに編集)

VBE画面を開く

てな感じで

コードが起こされてるので、前々回ゆーた

=0と=Falseは、
削除して、ほぼ問題なし

を使って、

・変更前

Sub Macro2()
'
' Macro2 Macro
'

'
    Cells.Select
    With Selection.Font
        .Name = "Meiryo UI"
        .Size = 11
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .ThemeFont = xlThemeFontNone
    End With
    Selection.Font.Size = 12
    ActiveWindow.DisplayGridlines = False
End Sub

・変更後

Sub Macro2()
    Cells.Select
    With Selection.Font
        .Name = "Meiryo UI"
        .Size = 11
        .Underline = xlUnderlineStyleNone
        .ThemeColor = xlThemeColorLight1
        .ThemeFont = xlThemeFontNone
    End With
    Selection.Font.Size = 12
    ActiveWindow.DisplayGridlines = False
End Sub

余計なコードは全部消す。さらに、

        .Size = 11
        .Underline = xlUnderlineStyleNone
        .ThemeColor = xlThemeColorLight1
        .ThemeFont = xlThemeFontNone

なんかも明らかに今回操作してない余計なコードだと分かるので消すと

Sub Macro2()
    Cells.Select
    With Selection.Font
        .Name = "Meiryo UI"
    End With
    Selection.Font.Size = 12
    ActiveWindow.DisplayGridlines = False
End Sub

てな感じでスッキリする。
ここまで来たら、Withは要らないので削除

Sub Macro2()
    Cells.Select
    Selection.Font.Name = "Meiryo UI"
    Selection.Font.Size = 12
    ActiveWindow.DisplayGridlines = False
End Sub

さらに、前々回のもう一歩前へで、ゆーた小分けにして、各コマンドを再利用しやすいようにする作法を使って、

Option Explicit

Sub シート全範囲選択()
    Cells.Select
End Sub
Sub 選択文字をMeiryoUIにする()
    Selection.Font.Name = "Meiryo UI"
End Sub
Sub フォントサイズを12にする()
    Selection.Font.Size = 12
End Sub
Sub 目盛線の表示を変更()
    ActiveWindow.DisplayGridlines = False
End Sub
てな感じで、小分けにした

ここでポイント⑤:有効無効は、ボタンを押すたびに切替えできるようにしておくと、複数ボタンを作らなくてよくなる

小分けにした最後の、

Sub 目盛線の表示を変更()
    ActiveWindow.DisplayGridlines = False
End Sub

は、目盛線を非表示するだけのコマンドになっているのが分かるんだけど、

Falseが無効なら、反対のTrueが有効

って分かるので、今後、再利用できるようにさらに、

Sub 目盛線の表示を変更()
    ActiveWindow.DisplayGridlines = False
End Sub
Sub 目盛線の表示()
    ActiveWindow.DisplayGridlines = True
End Sub
Sub 目盛線の非表示()
    ActiveWindow.DisplayGridlines = False
End Sub

小分けにしたSubを追加して、If文を使って

Sub 目盛線の表示を変更()
    If ActiveWindow.DisplayGridlines = False Then
        ActiveWindow.DisplayGridlines = True
    Else
        ActiveWindow.DisplayGridlines = False
    End If
End Sub
Sub 目盛線の表示()
    ActiveWindow.DisplayGridlines = True
End Sub
Sub 目盛線の非表示()
    ActiveWindow.DisplayGridlines = False
End Sub

てな感じで条件分岐させておく( ´∀` )

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

ここから先は今までと同じ流れで、エビデンス採取ツールに書式ボタンを追加して、

てな感じ

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

コマンドボタンさっき編集したコードを貼り付け

てな感じ

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

で、Callで各Subを追加

・変更前

Private Sub 書式ボタン_Click()

End Sub

・変更後

Private Sub 書式ボタン_Click()
    Call シート全範囲選択
    Call 選択文字をMeiryoUIにする
    Call フォントサイズを12にする
    Call 目盛線の表示を変更
End Sub

⑥期待値どおりに他のシートでも動くか検証

冒頭で作ったQAシートも初期設定になってるので~~~

てな感じ

ユーザーフォームから書式ボタンをクリックして、実行

ハイ、変わった
目盛線も消えた💃

で、もう一回、書式ボタンをクリックすると、、、

ハイ、目盛線が出てきました~~~

No1シートでも

再クリック前
再クリック後
てな感じ

まあ、今のままだと最初にシートの全範囲を選択してるから、書式ボタンをクリックする度に

てな感じで

ドラッグされるのが嫌な人は、前回作ったA1選択Subを

Private Sub 書式ボタン_Click()
    Call シート全範囲選択
    Call 選択文字をMeiryoUIにする
    Call フォントサイズを12にする
    Call 目盛線の表示を変更
    Call A1選択
End Sub

てな感じで呼び出してあげるだけで

てな感じにも出来る

のでやってみて🕺
書式ボタンの応用で、シート追加ボタンも同じ手順で簡単に作れるので~~

■シート追加ボタンを作ろう

この記事の1回目で見せた

このブック=シートが44個もある

テスト経験者なら分かると思うんだけど、実はコレ

テストパターンでは標準かまだ数が少ない方

※テストパターンで70~100とかテストケースがあるのはザラ( ´∀` )ワッショイ
そんなとき、

  • テストケースごとにシートを100個なら100枚追加

  • 書式をフォントサイズ12にして、

  • フォントを見やすいものにして、

  • 目盛線を非表示にして、…

なんてやってたら

日が暮れる( ;∀;)
👉(前回ゆーた)
反復ストレス症候群( ´∀` )

なので、ここも

繰り返される同じ操作は、
マクロ化した方が圧倒的に
操作ミスなく、時間短縮できる

オイラがここでよくやる操作は、

さっきの書式ボタンで記録した

  1. 全シートを選択

  2. フォント:Meiryo UI

  3. フォントサイズ:12

  4. ついでに、目盛線も表示なしの方が見やすいので、目盛線なし

も使うけど、

  • 現在選んだセルの右横に新規のシート

  • A列を右寄せ

  • シート全体を太文字

  • シート名を押すたびに連番(1、2、3…)で変更

も追加でマクロ化って感じ( ´∀` )

①マクロの記録でマクロを起こす

これまでと同じ操作でマクロを記録し、必要な操作だけしたら、記録を終了してく。
記録しながらやる操作はこれだけ

  1. 現在選んだセルの右横に新規のシート追加

  2. 全シートを選択

  3. フォント:Meiryo UI

  4. フォントサイズ:12

  5. シート全体を太文字

  6. 目盛線なし

  7. A列を右寄せ

  8. シート名を押すたびに連番(1、2、3…)で変更

で、記録の終了までした結果が

てな感じ

②マクロの余計なコードを消す(ついでに編集)

VBE画面で対象のModuleを開くと、コードが表示されてるので~~

てな感じ

いつもと同じ=Falseと=0で、余計なコードは削除

・変更前

Sub Macro4()
'
' Macro4 Macro
'

'
    Sheets.Add After:=ActiveSheet
    Cells.Select
    With Selection.Font
        .Name = "Meiryo UI"
        .Size = 11
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .ThemeFont = xlThemeFontNone
    End With
    Selection.Font.Size = 12
    Selection.Font.Bold = True
    ActiveWindow.DisplayGridlines = False
    Columns("A:A").Select
    With Selection
        .HorizontalAlignment = xlRight
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Sheets("Sheet4").Select
    Sheets("Sheet4").Name = "No2"
End Sub

・変更後

Sub Macro4()
    Sheets.Add After:=ActiveSheet
    Cells.Select
    Selection.Font.Name = "Meiryo UI"
    Selection.Font.Size = 12
    Selection.Font.Bold = True
    ActiveWindow.DisplayGridlines = False
    Columns("A:A").Select
    With Selection
        .HorizontalAlignment = xlRight
        .VerticalAlignment = xlCenter
        .ReadingOrder = xlContext
    End With
    Sheets("Sheet4").Select
    Sheets("Sheet4").Name = "No2"
End Sub

次に、さっきの書式ボタンで作ったマクロはそっちを使えばいいので不要なので削除

Option Explicit
Sub Macro4()
    Sheets.Add After:=ActiveSheet
    Selection.Font.Bold = True
    Columns("A:A").Select
    With Selection
        .HorizontalAlignment = xlRight
        .VerticalAlignment = xlCenter
        .ReadingOrder = xlContext
    End With
    Sheets("Sheet4").Select
    Sheets("Sheet4").Name = "No2"
End Sub

さらに、With~End WithのA列の設定について、右寄せ=Rightにした以外は別に何もしてないので削除

Sub Macro4()
    Sheets.Add After:=ActiveSheet
    Selection.Font.Bold = True
    Columns("A:A").Select
    With Selection
        .HorizontalAlignment = xlRight
    End With
    Sheets("Sheet4").Select
    Sheets("Sheet4").Name = "No2"
End Sub

ここまで来ると、

    Columns("A:A").Select
    With Selection
        .HorizontalAlignment = xlRight
    End With

はあきらかにWithとEnd Withが不要で、しかも、1行目と繋げられるので

Sub Macro4()
    Sheets.Add After:=ActiveSheet
    Selection.Font.Bold = True
    Columns("A:A").HorizontalAlignment = xlRight
    Sheets("Sheet4").Select
    Sheets("Sheet4").Name = "No2"
End Sub

と、ここまでシンプルになったところで、さっきのシートをいったん削除して、再実行すると

てな感じで、デバッグボタンをクリック
てな感じで最初のバグ発生箇所が示される

実行する度に、新規シートを追加するけど、

Sheets("Sheet4").Select
Sheets("Sheet4").Name = "No2"

で指定した、Sheet4がプロジェクトエクスプローラー上にも存在しないし、

存在しない

Excel上にも存在しない

存在しない

やりたい操作としては、新規で追加したシートは、

コメント化した行を選んで
右上のコメントブロックをクリック
まとめてコメント化(コメントアウト)
再実行
新規シートだけ末尾に追加

で、

新規追加シートが選択されてる
=アクティブなシート

なはずなので、コードを編集

コメント化したコードを選んで
右上の非コメントブロックをクリック
元に戻ったところで

存在しないSheet4を選んでる

Sheets("Sheet4").Select

は削除して、

Sub Macro4()
    Sheets.Add After:=ActiveSheet
    Selection.Font.Bold = True
    Columns("A:A").HorizontalAlignment = xlRight
    Sheets("Sheet4").Name = "No2"
End Sub
てな感じ
Sheets("Sheet4").Name = "No2"

アクティブなシート=ActiveSheet

に変更して、

Sub Macro4()
    Sheets.Add After:=ActiveSheet
    Selection.Font.Bold = True
    Columns("A:A").HorizontalAlignment = xlRight
    ActiveSheet.Name = "No2"
End Sub

再実行

ハイ、エラーなく末尾にNo2シートが追加された💃

このままだと、次に実行したときに

てな感じで
同じ名前のシートを追加すんなやエラー

エラーになるので、連番でシート名を追加できるように

変数

を使って、

ActiveSheet.Name = "No2"

ここの右辺の値を変更できるようにしてく。
今回は、シート番号なので、変数を

sheetNumber

って感じで定義してくんだけど、

ここでポイント⑥:グローバルに変数や引数は定義する(同じものはひとつにまとめた方が管理が楽)

一般的によく教科書なんかでもやってるのが

Sub Macro4()
    Dim sheetNumber As Integer
    Sheets.Add After:=ActiveSheet
    Selection.Font.Bold = True
    Columns("A:A").HorizontalAlignment = xlRight
    ActiveSheet.Name = "No2"
End Sub

てな感じで、使うSubプロシージャの中に定義しちゃうやりかた。
これが一般的なんでほぼほぼ皆さんこれでやってるんだけど、これだと、

同じ役割の変数なのに、
各処理の中に似通った名前のコードが存在

して、

  • 改修時に改修箇所が増える

  • 似通った名前の変数で見落としや改修漏れが発生する

👉全てバグの原因に繋がる

  • 全部把握したとしても、改修が面倒

👉改修コストや管理コストがかさむ

ので、OptionExplicitと最初のSubの間に持ってくる

ココな

で、コマンドボタンを押すたびに、

連番=シート番号に+1

をすればいいだけなので、

    sheetNumber = sheetNumber + 1
    ActiveSheet.Name = "No" & sheetNumber

てな感じで、実際に変数を使う処理の直前に追記しておくだけ

Sub Macro4()
    Sheets.Add After:=ActiveSheet
    Selection.Font.Bold = True
    Columns("A:A").HorizontalAlignment = xlRight
    sheetNumber = sheetNumber + 1
    ActiveSheet.Name = "No" & sheetNumber
End Sub

ここまでの操作で、既にNo1シートとNo2シートは存在するので、便宜的にシート名を変更して、

てな感じ

さっきまで追加された余計なシートも削除

コイツら
削除後

この状態で、5回実行してみると、No1~No5シートが末尾に追加された💃

てな感じ

ここまで確認出来たら、No1~No5シートは要らないので削除

削除後

それで、書式ボタンと同じようにコードを処理単位で小分けにして

・変更前

Sub Macro4()
    Sheets.Add After:=ActiveSheet
    Selection.Font.Bold = True
    Columns("A:A").HorizontalAlignment = xlRight
    sheetNumber = sheetNumber + 1
    ActiveSheet.Name = "No" & sheetNumber
End Sub

・変更後

Sub 末尾に新規シートを追加()
    Sheets.Add After:=ActiveSheet
End Sub
Sub 選択箇所を太字()
    Selection.Font.Bold = True
End Sub
Sub A列右寄せ()
    Columns("A:A").HorizontalAlignment = xlRight
End Sub
Sub シート名を変更()
    sheetNumber = sheetNumber + 1
    ActiveSheet.Name = "No" & sheetNumber
End Sub

※変数の考え方について気になる方は、

も参考にしてみてね( ´∀` )

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

ここまで来たら後は、これまでの手順と同様に、エビデンス採取ツールフォームにコマンドボタンを追加して、オブジェクト名とCaptionを変更して

てな
プロパティウィンドウ

てな感じ

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

さっきのマクロを切り取って、エビデンス採取ツールフォームに貼付け

貼付け後

変数は、Sub~End Subの間か、グローバル領域の中だけで定義できるので

コイツな
ココに移動
ココな

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

シート追加ボタンをダブルクリックして追記されたコード

Private Sub シート追加ボタン_Click()

End Sub

に、

  1. 現在選んだセルの右横に新規のシート追加

  2. 全シートを選択

  3. フォント:Meiryo UI

  4. フォントサイズ:12

  5. シート全体を太文字

  6. 目盛線なし

  7. A列を右寄せ

  8. シート名を押すたびに連番(1、2、3…)で変更

の順番でCallしてくだけ

Private Sub シート追加ボタン_Click()
    Call 末尾に新規シートを追加
    Call シート全範囲選択
    Call 選択文字をMeiryoUIにする
    Call フォントサイズを12にする
    Call 選択箇所を太字
    Call 目盛線の表示を変更
    Call A列右寄せ
    Call シート名を変更
End Sub

てな感じ

⑥ユーザーフォームから実行して、確認・検証

Excel表でいつもどおりユーザーフォームを開いて、シート追加ボタンを実行

シート追加な

実行すると、シートは追加された

てな感じ

やはり、シート全体が選択されてるのが気になるので、今追加したシートは削除して、

てな感じ

ユーザーフォームも一度、右上の✕で閉じて

閉じた

A1選択を、シート追加ボタンの処理に追加しておこう( ´∀` )

Private Sub シート追加ボタン_Click()
    Call 末尾に新規シートを追加
    Call シート全範囲選択
    Call 選択文字をMeiryoUIにする
    Call フォントサイズを12にする
    Call 選択箇所を太字
    Call 目盛線の表示を変更
    Call A列右寄せ
    Call シート名を変更
    Call A1選択
End Sub
てな感じ

で、再度ユーザーフォームから実行

実行前
ハイ、完了

リファクタリング

ここまでで今のエビデンス採取ツールフォームのコード全体を示すと

Option Explicit
Dim sheetNumber As Integer
Private Sub A1選択ボタン_Click()
    Call A1選択
End Sub
Sub A1選択()
    Range("A1").Select
End Sub
Sub A4選択()
    Range("A4").Select
End Sub

Private Sub A4選択ボタン_Click()
    Call A4選択
End Sub

Private Sub シート追加ボタン_Click()
    Call 末尾に新規シートを追加
    Call シート全範囲選択
    Call 選択文字をMeiryoUIにする
    Call フォントサイズを12にする
    Call 選択箇所を太字
    Call 目盛線の表示を変更
    Call A列右寄せ
    Call シート名を変更
    Call A1選択
End Sub

Sub 末尾に新規シートを追加()
    Sheets.Add After:=ActiveSheet
End Sub
Sub 選択箇所を太字()
    Selection.Font.Bold = True
End Sub
Sub A列右寄せ()
    Columns("A:A").HorizontalAlignment = xlRight
End Sub
Sub シート名を変更()
    sheetNumber = sheetNumber + 1
    ActiveSheet.Name = "No" & sheetNumber
End Sub
Private Sub スクショ画像ボタン_Click()
    Call 縮小60パーセント
    Call 黒枠
    Call 埋込
End Sub

Private Sub 行の高さボタン_Click()
    Call 行の高さを変更
End Sub
Sub 行の高さを変更()
    Selection.RowHeight = 234
End Sub
Private Sub 黒枠縮小のみボタン_Click()
    Call 縮小60パーセント
    Call 黒枠
End Sub

Private Sub 書式ボタン_Click()
    Call シート全範囲選択
    Call 選択文字をMeiryoUIにする
    Call フォントサイズを12にする
    Call 目盛線の表示を変更
    Call A1選択
End Sub
Sub シート全範囲選択()
    Cells.Select
End Sub
Sub 選択文字をMeiryoUIにする()
    Selection.Font.Name = "Meiryo UI"
End Sub
Sub フォントサイズを12にする()
    Selection.Font.Size = 12
End Sub
Sub 目盛線の表示を変更()
    If ActiveWindow.DisplayGridlines = False Then
        ActiveWindow.DisplayGridlines = True
    Else
        ActiveWindow.DisplayGridlines = False
    End If
End Sub
Sub 目盛線の表示()
    ActiveWindow.DisplayGridlines = True
End Sub
Sub 目盛線の非表示()
    ActiveWindow.DisplayGridlines = False
End Sub

Private Sub 挿入した図ボタン_Click()
    Call 挿入した図のサイズを変更
    Call 黒枠
    Call 埋込
End Sub

Sub 縮小60パーセント()
    Selection.ShapeRange.ScaleHeight 0.6, msoFalse, msoScaleFromTopLeft
End Sub
Sub 黒枠()
    With Selection.ShapeRange.Line
        .Visible = msoTrue
        .ForeColor.RGB = RGB(0, 0, 0)
    End With
End Sub
Sub 埋込()
    Selection.Placement = xlMoveAndSize
End Sub
Sub 挿入した図のサイズを変更()
    Selection.ShapeRange.Height = 345.5433070866
    Selection.ShapeRange.Width = 614.5511811024
End Sub

とまあ、処理は実行できるんだけど、

グチャグチャで見にくい

ここでポイント⑦:コードがぐちゃぐちゃになっちゃう原因

コマンドボタンみたいなオブジェクトをダブルクリックする度に、自動で最終行の下に追記してくれればいいんだけど、

そこまでは、やってくんないから( ´∀` )
👉自分で綺麗に直すしかない

なので、

綺麗に整理
👉リファクタリング
=コードを安全に管理する技術

◆リファクタリング後

Option Explicit
'グローバル変数---------------------------
Dim sheetNumber As Integer

'呼び出し元のオブジェクト------------------
Private Sub スクショ画像ボタン_Click()
    Call 縮小60パーセント
    Call 黒枠
    Call 埋込
End Sub
Private Sub 黒枠縮小のみボタン_Click()
    Call 縮小60パーセント
    Call 黒枠
End Sub
Private Sub 挿入した図ボタン_Click()
    Call 挿入した図のサイズを変更
    Call 黒枠
    Call 埋込
End Sub
Private Sub A1選択ボタン_Click()
    Call A1選択
End Sub
Private Sub A4選択ボタン_Click()
    Call A4選択
End Sub
Private Sub 行の高さボタン_Click()
    Call 行の高さを変更
End Sub
Private Sub 書式ボタン_Click()
    Call シート全範囲選択
    Call 選択文字をMeiryoUIにする
    Call フォントサイズを12にする
    Call 目盛線の表示を変更
    Call A1選択
End Sub
Private Sub シート追加ボタン_Click()
    Call 末尾に新規シートを追加
    Call シート全範囲選択
    Call 選択文字をMeiryoUIにする
    Call フォントサイズを12にする
    Call 選択箇所を太字
    Call 目盛線の表示を変更
    Call A列右寄せ
    Call シート名を変更
    Call A1選択
End Sub

'呼び出される処理(マクロ)------------------
Sub 縮小60パーセント()
    Selection.ShapeRange.ScaleHeight 0.6, msoFalse, msoScaleFromTopLeft
End Sub
Sub 黒枠()
    With Selection.ShapeRange.Line
        .Visible = msoTrue
        .ForeColor.RGB = RGB(0, 0, 0)
    End With
End Sub
Sub 埋込()
    Selection.Placement = xlMoveAndSize
End Sub
Sub 挿入した図のサイズを変更()
    Selection.ShapeRange.Height = 345.5433070866
    Selection.ShapeRange.Width = 614.5511811024
End Sub
Sub A1選択()
    Range("A1").Select
End Sub
Sub A4選択()
    Range("A4").Select
End Sub
Sub 行の高さを変更()
    Selection.RowHeight = 234
End Sub
Sub シート全範囲選択()
    Cells.Select
End Sub
Sub 選択文字をMeiryoUIにする()
    Selection.Font.Name = "Meiryo UI"
End Sub
Sub フォントサイズを12にする()
    Selection.Font.Size = 12
End Sub
Sub 目盛線の表示を変更()
    If ActiveWindow.DisplayGridlines = False Then
        ActiveWindow.DisplayGridlines = True
    Else
        ActiveWindow.DisplayGridlines = False
    End If
End Sub
Sub 目盛線の表示()
    ActiveWindow.DisplayGridlines = True
End Sub
Sub 目盛線の非表示()
    ActiveWindow.DisplayGridlines = False
End Sub
Sub 末尾に新規シートを追加()
    Sheets.Add After:=ActiveSheet
End Sub
Sub 選択箇所を太字()
    Selection.Font.Bold = True
End Sub
Sub A列右寄せ()
    Columns("A:A").HorizontalAlignment = xlRight
End Sub
Sub シート名を変更()
    sheetNumber = sheetNumber + 1
    ActiveSheet.Name = "No" & sheetNumber
End Sub

整理するとこんな感じ( ´∀` )
とりあえず、今回の解説は以上。

さてと、次回は

やっとこ、コードの編集が必要な操作の説明にも入れたけど、
実は今のままだと、シート追加ちゃんは、ユーザーフォームを開きなおして実行すると、

開きなおし後、シート追加ボタンをクリック

さっきと同じエラーが発生( ´∀` )

同じ名前のシートを追加すんなやエラー
てな感じでSheet43ってシート名が変名出来てない

って現象の原因とそれを回避する機能

シート番号入力ボタン

から解説して、繋がってるので、

手順番号ボタン
手順番号入力ボタン

の説明をやろうかね💃

明日明後日は、大手新聞5紙を毎年恒例で読むので、

続きは、1月3日からかな( ´∀` )
んだば、
続きは、また次回
💃

今回の関連記事

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

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

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

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