VBAにもっと詳しくなろう♪ 「パーフェクトExcel VBA」
VBAをパーフェクトにマスターするシリーズ♪ 2章「式と値」「パーフェクトExcel VBA」
続きを書きました。
VBAをパーフェクトにマスターするシリーズ♪
今回は「3章」で新しく知ったことと、思ったことを簡単にまとめました。
詳細につきましては、書籍をご覧ください。
3-1-2 ステートメントの記述
前回気になった、コロン記号についての記述はここにありました。
3-2-6 スコープを絞る重要性
宣言を先頭にまとめて書くことは、最初は習慣として行っていましたが
使う直前に宣言したほうがいいよね?と。確かにその通りです。
そこで「コロン記号」もさらに活躍の場が増えます。
Dim x as Long: x = 10
Dim y as String: y = "abc"
なるほど!
3-3-2 ネーミングの方針
一部抜粋します。
・変数にはキャメル記法、
モジュールやプロシージャ、メソッド及びプロパティにはパスカル記法、
定数にはアッパースネーク記法
キャメル記法の例: lastRow , userName
パスカル記法の例: SetValue , EndOfMonth , IsClear
アッパースネーク記法の例: TAX_RATE , TARGET_URL
・変数やプロパティには名詞、
Subプロシージャやfunctionプロシージャおよびメソッドは動詞のワードから始める・配列やコレクションの変数名は複数形にする
私は今でもカタカナが並ぶと即座に理解はできません。
モジュール、ああ、標準モジュールとかの、あれのことか。
プロシージャ、、、SubプロシージャとかFunctionプロシージャってそういえばさっき書いたな。
メソッド、、、メソッド? 巻末の索引を見る。
「Addメソッド」「Copyメソッド」ふむ。。
プロパティ。これはすぐわかる。
ああそういえば、プロシージャもキャメル記法で書いてるな、と気付きました。
コーディング規約というかルール決めていないので、ちょっとこの辺は弱いところです。
ルールを固めておきたいです。(すでに書いたものを直すのはなかなか大変だけど)
3-4-1 変数の宣言
Sub Mysub()
Dim msg As String
Dim x As Long, y As Long
Stop
End Sub
実は今までstopって何に使うんだろう?と思ってました。
実行するとStopのところで止まるので、そのときにローカルウィンドウを見る、という使い方ができる!
やってみました。おー便利!
3-4-3 変数の有効期間
プロシージャレベル変数についてプロシージャ終了後にも値を保持しておきたいときには、
Staticステートメントを使うという方法があります。
Staticステートメントが使えるそうです。いつのタイミングで使うと良いのか、今はわかりませんが、知識として持っておくと、何かの時に使うという選択肢が増えますね。
VBAの「やさしさ」が影響をして、勘違いを生じさせる可能性のある要因が含まれています。
3-5-2 値の代入
変数やプロパティに値を代入するには、Letステートメントを使用します。
以下のように、
Dim num As Long: Let num = 10
Dim message As String: Let message = "hoge"
今まで何気なくやっていた値の代入ですが、
Letを省略していたということのようです。ほう!
Dim num As Long: num = 10
Dim message As String: message = "hoge"
3-5-4 オブジェクト参照の代入
Letに対して、オブジェクト参照の時は、Setになっていて、
これを省略するとLetだと認識されて実行時エラーになる、ということと理解しました。
3-6-1 定数の宣言
マジックナンバーはできる限り使わないで書きたいし、
書いてほしいので、定数や、列挙型を活用したいところです。
ここはいちばん最初から気を付けておきたいポイントです!
3-6-2 列挙型の宣言
列挙型が使えます。とても便利!
列挙型はプロシージャレベルで宣言することはできません。
したがってEnumステートメントは宣言セクションに記述します。パブリックモジュールレベルにするのであればPubicキーワード、
プライベートモジュールレベルにするのであればPrivateキーワードを構文の先頭に付与します。
いずれのキーワードも省略した場合は、パブリックモジュールレベルとなります。
Public、Privateを省略したときに、どっちになるか、というのが、
常に同じではないような気がして、私はこの辺があいまいになっています。
(SubプロシージャやFunctionプロシージャで省略したときもPublicになりますね。)
できるだけ省略しないで書くに越したことはないと思います!
3-7-2 固定配列の宣言
宣言セクションにOption Baseステートメントを記述すると、そのモジュールでの配列の下限値を設定することができます。デフォルトでは0となります。
Option Base { 0 | 1 }
3-7-5 Variant型の変数と配列
Dim values As Variant
values = Array("Bob", 25, #1/1/1993#)
Debug.Print values(0), values(1), values(2)
Variant型の変数は配列として宣言をしなくても、配列を格納できます。
その際に、配列のサイズの指定をする必要はありません。Array関数は配列を含むVariant型を返す関数です。10章で改めて紹介します。
セル範囲をまとめて配列に取得するときに使っています。とても便利です。
11章で紹介されているようです。
3-7-6 配列の初期化と解放
Erase arraylist
配列の消去を行うステートメント。使ったことないです。
固定配列の場合は、要素がデータ型に応じて初期化される。
動的配列の場合は、確保しているメモリが解放される。
Erase staticArray, dinamicArray の後
ユーザー定義型を宣言するには、以下のTypeステートメントを使用します。
ユーザー定義型は、プロシージャレベルでは宣言することができませんので、Typeステートメントは宣言セクションに記述します。
これも使っていないです。使えることを知りませんでした。
ユーザー定義型の要素は配列とすることもできます
Private Type Person
Name As String
Age As Long
Birthday As Date
End Type
Sub MySub()
Dim p As Person
p.Name = "Bob"
p.Age = 25
p.Birthday = #1/1/1993#
End Sub
ユーザー定義型で実現できることは、クラス定義することで実現可能です。
各要素に対して処理を行いたいときや、コレクションに追加したいときなどは、ユーザー定義型では実現できませんので、クラスを使うことになります。
まだVBAでクラスを使ったことがないのです。
クラスをどんなふうに使うのかはもう少し後に載ってそうです。
Rem comment
' comment
コメントは、アポストロフィ記号(')を使います。
実はこの記述方法はRemステートメントの省略形です。
Remステートメントは「VBAのすべての命令はステートメントである」ということを表す好例です。
アポストロフィ記号は実は「Rem」の略なのだそうです。知りませんでした!
他にも、知らずに省略したりしていることが多そうです。(Letもそうでした)
ひとつひとつ知っていくことで、少しずつ知識が深まっているというか、
表面的には変わらなくても、知っておくことは割と大事なことのような気がしています。
.
これで3章は終わりです!
ここに書きながらなので、こんなに丁寧に書籍を読み進めたことはないかも、というほど丁寧に読んでいます。
どこまで書けるかな? すくなくとも「Part2 Excel VBAの言語仕様」のところは、こうして追っていけたらと思っています。
書籍「パーフェクトExcel VBA」発売についてのお知らせ
第1回 | VBAにもっと詳しくなろう♪ 「パーフェクトExcel VBA」 |
第2回 | VBAをパーフェクトにマスターするシリーズ♪ 2章「式と値」「パーフェクトExcel VBA」 |
第3回 | VBAをパーフェクトにマスターするシリーズ♪ 3章「ステートメント」「パーフェクトExcel VBA」 |
第4回 | VBAをパーフェクトにマスターするシリーズ♪ 4章「フロー制御ステートメント」「パーフェクトExcel VBA」 |
第5回 | VBAをパーフェクトにマスターするシリーズ♪ 5章「プロシージャ」「パーフェクトExcel VBA」 |
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント