2019-12-27に更新

VBAをパーフェクトにマスターするシリーズ♪ 3章「ステートメント」「パーフェクトExcel VBA」

■前回までの記事

VBAにもっと詳しくなろう♪ 「パーフェクトExcel VBA」

VBAをパーフェクトにマスターするシリーズ♪ 2章「式と値」「パーフェクトExcel VBA」

続きを書きました。
VBAをパーフェクトにマスターするシリーズ♪
今回は「3章」で新しく知ったことと、思ったことを簡単にまとめました。
詳細につきましては、書籍をご覧ください。

■3章「ステートメント」

3-1  ステートメントとは

3-1-2 ステートメントの記述

前回気になった、コロン記号についての記述はここにありました。

3-2 スコープ

3-2-6 スコープを絞る重要性

宣言を先頭にまとめて書くことは、最初は習慣として行っていましたが
使う直前に宣言したほうがいいよね?と。確かにその通りです。
そこで「コロン記号」もさらに活躍の場が増えます。

Dim x as Long: x = 10
Dim y as String: y = "abc"

なるほど!

3-3 識別子とネーミング

3-3-2 ネーミングの方針

一部抜粋します。

・変数にはキャメル記法、
モジュールやプロシージャ、メソッド及びプロパティにはパスカル記法、
定数にはアッパースネーク記法

キャメル記法の例: lastRow , userName
パスカル記法の例: SetValue , EndOfMonth , IsClear
アッパースネーク記法の例: TAX_RATE , TARGET_URL

・変数やプロパティには名詞、
Subプロシージャやfunctionプロシージャおよびメソッドは動詞のワードから始める

・配列やコレクションの変数名は複数形にする

私は今でもカタカナが並ぶと即座に理解はできません。
モジュール、ああ、標準モジュールとかの、あれのことか。
プロシージャ、、、SubプロシージャとかFunctionプロシージャってそういえばさっき書いたな。

メソッド、、、メソッド?  巻末の索引を見る。
「Addメソッド」「Copyメソッド」ふむ。。
プロパティ。これはすぐわかる。

ああそういえば、プロシージャもキャメル記法で書いてるな、と気付きました。
コーディング規約というかルール決めていないので、ちょっとこの辺は弱いところです。
ルールを固めておきたいです。(すでに書いたものを直すのはなかなか大変だけど)

3-4 変数

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ステートメントが使えるそうです。いつのタイミングで使うと良いのか、今はわかりませんが、知識として持っておくと、何かの時に使うという選択肢が増えますね。

3-5 代入

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 定数/列挙型

3-6-1 定数の宣言

マジックナンバーはできる限り使わないで書きたいし、
書いてほしいので、定数や、列挙型を活用したいところです。
ここはいちばん最初から気を付けておきたいポイントです!

3-6-2 列挙型の宣言

列挙型が使えます。とても便利!

列挙型はプロシージャレベルで宣言することはできません。
したがってEnumステートメントは宣言セクションに記述します。

パブリックモジュールレベルにするのであればPubicキーワード、
プライベートモジュールレベルにするのであればPrivateキーワードを構文の先頭に付与します。
いずれのキーワードも省略した場合は、パブリックモジュールレベルとなります。

Public、Privateを省略したときに、どっちになるか、というのが、
常に同じではないような気がして、私はこの辺があいまいになっています。
(SubプロシージャやFunctionプロシージャで省略したときもPublicになりますね。)
できるだけ省略しないで書くに越したことはないと思います!

3-7 配列

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

配列の消去を行うステートメント。使ったことないです。

固定配列の場合は、要素がデータ型に応じて初期化される。
動的配列の場合は、確保しているメモリが解放される。

1.png

Erase staticArray, dinamicArray の後

2.png

3-8 ユーザー定義型

ユーザー定義型を宣言するには、以下の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でクラスを使ったことがないのです。
クラスをどんなふうに使うのかはもう少し後に載ってそうです。

3-9 コメント

Rem comment

' comment

コメントは、アポストロフィ記号(')を使います。

実はこの記述方法はRemステートメントの省略形です。

Remステートメントは「VBAのすべての命令はステートメントである」ということを表す好例です。

アポストロフィ記号は実は「Rem」の略なのだそうです。知りませんでした!

他にも、知らずに省略したりしていることが多そうです。(Letもそうでした)

ひとつひとつ知っていくことで、少しずつ知識が深まっているというか、
表面的には変わらなくても、知っておくことは割と大事なことのような気がしています。

.

これで3章は終わりです!

ここに書きながらなので、こんなに丁寧に書籍を読み進めたことはないかも、というほど丁寧に読んでいます。
どこまで書けるかな? すくなくとも「Part2 Excel VBAの言語仕様」のところは、こうして追っていけたらと思っています。

▼著者サイト

書籍「パーフェクトExcel VBA」発売についてのお知らせ

▼Amazonリンク

パーフェクトExcel VBA (PERFECT SERIES)   高橋 宣成著

ツイッターでシェア
みんなに共有、忘れないようにメモ

view_list [連載]「パーフェクトExcelVBA」の本で勉強中〜
第1回 VBAにもっと詳しくなろう♪ 「パーフェクトExcel VBA」
第2回 VBAをパーフェクトにマスターするシリーズ♪ 2章「式と値」「パーフェクトExcel VBA」
第3回 VBAをパーフェクトにマスターするシリーズ♪ 3章「ステートメント」「パーフェクトExcel VBA」
第4回 VBAをパーフェクトにマスターするシリーズ♪ 4章「フロー制御ステートメント」「パーフェクトExcel VBA」
第5回 VBAをパーフェクトにマスターするシリーズ♪ 5章「プロシージャ」「パーフェクトExcel VBA」

Hata

個人でアプリを作ってたりなかったり(゚ω゚)。

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント