見出し画像

第37回 VBA会 和風スパゲティ

登壇者:和風スパゲティ
日時 :2022年4月2日
テーマ:脱初心者!メンテナンスしやすいマクロの作り方

画像1

画像2

Excel A列を縦結合すると、1ページずつスクロールできるってよ

画像3

(日本語変数・関数の第一人者!)
(健康診断もちゃんと受けましょう)

むしろ変数名に母国語を使っている人がマジョリティ?

画像4

画像6

本日のメニュー

画像5


1.まずは道具の使い方

画像8

まずは画面から。ツールーオプションーエディターの設定で色やフォントを変えられる。

画像9

画像10

画像7

識別子がメインのコードになるので、これを白にしましょう。

画像11

次にタブ! TABキーで右に、Shift+TABキーで左に!

画像12

これは行範囲でも使えます。

画像13

コードの入力補完!

Ctrl+スペースで、入力文字から始まる候補がリストアップされる。
候補が1つしかない場合はリストは出ず、その文字が表示される。

画像14

変数宣言の強制!

デフォルトはチェック無し。これは必ずチェックしましょう。
(余談ですが、自動構文チェックは外すの推奨)

画像16


チェックしないとね・・・スペルミスしてもエラーにならない。

画像18

Option Explicitを付けると、へんすう宣言が強制。宣言されていない変数使うとエラーになる。

画像18

変数宣言強制にすると面倒か?
いやいや、さっきのCtrl+スペースが効いてくる。
面倒な変数名付けても自動補完できちゃうから面倒じゃないの。

画像19

コメントアウト

編集ウィンドウのコメントブロックで複数行まとめてコメントアウト可能

画像20

画像22

今日のサンプルマクロの説明

E3セルにコードを入力して請求書出力ボタンを押す。

画像22

画像23

(和風スパ 印付きやw)

ステップ実行とブレークポイント

画像24

(茶色のぽっちはブレークポイント=一時停止場所)

実行するとここで一時停止する。そこでF8キーを押すとステップ(行毎)実行します。

一時停止中の左の黄色い矢印は、ドラッグで上下に動かせる。

画像25

画像26

ブレークポイントではなくStopでも一時停止する。
If Thenと組み合わせてこんなことも。

画像27

イミディエイト

画像28

これとdebug.printが強い!

画像29

イミディエイトウィンドはこれだけではない!

?コマンドで計算もできるし、変数値の表示もできる。

画像30

こんな感じにすると、今から記入しようとしているセルのアドレスが確認できる。

画像31

画像32

さらに!コードも書ける!

画像33

値の代入もできる。

画像34



2.ワークシートの指定方法

画像34

ボタンを押すマクロで初学者がやりがちなのが全部Activesheet。でもこれはやめましょう。

画像35

なにかおかしいときにデバッグモード。一時中断中に他のシートを確認。
あれ?上手くいく・・・それはActiveSheetを変更したから。
一括実行するとやっぱりエラー。こんなことがよくある。

画像36

画像37

ワークシートオブジェクト名も変更できるよ。当然日本語!

画像38

画像39

画像40

さらに接頭辞を合わせておくと

画像42

入力時もCtrl+スペースでリストがでるよ。日本語も入力不要。

画像41

画像43

さらに!! シートオブジェクト名に . の後の候補もでるんだぜぇぇ!

画像44

画像45

まとめると・・・コードがこんなに読みやすくなるぜ!

画像46

画像47

ワークシート変数宣言して代入

これも大事だから使える様にしましょうね。

画像49

代入するコード見ると、読込から出力! めっちゃわかりやすいだろ!

画像49

さらに変数にする大きなメリットは...ws.copyメソッドが使える!

画像50

.copyは新規ブックにこのシートがコピーされる。
残念ながら戻り値がないので、作成後のActivesheetを捕まえる。
ここから書き込みを行えば元の請求書

画像51

(そうそう、よっぱおじさんも同じ系紹介してましたよね。)

i,j と R,C

変数名はiとかjと思いこんでませんか?
行列ならR1,R2,C1,C2とかのほうがめっちゃわかりやすいんだぜ!

画像52

画像53

3.変数の使いどころと説明変数

画像54

画像55

こんなコードにすると、コメント行が不要になる。これが説明変数!
例えばこのほうが読みやすいでしょぉぉぉ。

画像56

今回のDateSerialもこのほうが読みやすい!

画像57

画像59

画像58

画像60

データ数の保存とResize

画像61

データ数が確定した時点で変数に保存。その後Resize(データ数)などで使うと便利。

4.定数の使い方と超便利定数Enum

画像62

例えば定数をConstで定義する。広く使う定数はPublic Constでスコープを広く。Publicは悪じゃない! そもそもConstはPublic Constで使うべきケースの方が多い。

画像63

セルアドレスを定数にすると効果大!

画像64

画像65

画像66

画像67

ツールで使う変数をConst宣言しておくと・・・

画像69

入力時のインテリセンス効くし、説明変数になってコメントも不要。
すごいだろぉぉぉ。

画像68


本来はFunction定義するのがよいが中級者はそこまでやらなくてもOK。

画像70

Enum・・本日のメインイベント

画像71

まずは箱作り。CNo.は列番号

画像72

シート上の見出しをそのままコピーして縦にならベル。

画像75

画像73

画像74

ここでイミディエイト。Enum名の後に . を入力するとメンバー名をくれる。

画像76

画像77

画像78

画像79

2しか代入していないのに全部連番で入ってるぅぅぅぅぅ!!

画像80

画像81

さらに、縦にしてから2列コピーするとVBE上でタブまで入るんだぜ。

画像82

画像83

みんなこんなコメント付けてるだろ?

画像84

画像85

画像86

連番じゃない請求書は一つずつ設定する。

画像87

画像89

どうだ、これでリーダブルゥゥゥゥ!
一度Enumにしてしまえば、わざわざシートの列番号確認する必要ナッシングゥゥゥ!

画像89

さらに! 「月日の隣に曜日を追加して」って言われたら・・

画像91

Enum追加するだけぇぇぇ

画像90

画像92

画像93

画像94

スパさんブログ

は、コチラ

画像95

サンプルファイル


この記事が気に入ったらサポートをしてみませんか?