変数・定数
Enum定義は通常ひとつのモジュール内にまとめた方が便利ですが、場合によっては専用のモジュールを作りたいときがあります。その時のためにシート名と同名のモジュールを挿入してEnumコードを記載するマクロを紹介します。
オブジェクトに特定のプロパティが存在するかを調べる方法を解説します。一発でこれを行うプロパティは存在しませんので、オブジェクト.プロパティがエラーになるかどうかを調べて判定します。
ExcelVBAで使用できる変数の型(データ型)の一覧と、各変数を宣言・使用するサンプルコードを解説します。Long(整数)、Double(小数)、String(文字列)、Range(セル)、Worksheet(シート)など主要な型を覚えておきましょう。
VBAで十進数(Decimal)型を扱うときに使用するCDec関数を解説します。Decimal型は「固定小数点を動的に保持する」Currency型の上位のデータ型ですが、計算精度がDouble型以上ではない点に注意して下さい。
セルをRange変数に代入する時などに使う「Setステートメント」について解説します。実はSetはVBAさん向けのただの目印なので、単にRange.やWorksheet.など「"."が使える変数」にSetを使うと覚えておけばOKです。
TypeName関数とVarType関数の違いを解説します。どちらも変数や値のデータ型を調べるための関数ですが、返り値のわかりやすさとオブジェクトの判定機能の分TypeName関数が完全上位といってよいです。
値が何型かどうかを調べる方法のひとつにVarType関数がありますが、「普通にデータ型を調べる分にはTypeNameの下位互換」な関数ですので、ただデータ型を調べたいだけならTypeName関数をご使用ください。
変数や値が何型の変数(As ○○)かを調べるにはTypeName関数を使用します。TypeName関数は何型で宣言されているかではなく、今なんの型が入っているかを判定してくれる上、NotingやEmptyの判定も可能です。
変数や配列の要素がオブジェクトかどうかを調べるIsObject関数を解説します。変数の型が決まっている場合は中身の有無にかかわらずその型に応じた結果となるため、実際はVariant変数の中身を判定する関数です。
ワークシートを指定する方法としてシート名やシート番号を利用する他に「シートオブジェクト名」が使用できます。取り違えづらく、読みやすく、書きやすい最強のシート指定方法ですので是非とも採用してみてください。
第2回 和風スパゲティ勉強会「列挙型変数Enumの使い方」の配布資料と配信アーカイブを共有します。Enum変数を使った超高効率なCells指定法とEnumの真骨頂レイアウト変更を解説しました。復習にお役立てください。
和風スパゲティ勉強会 第2回のテーマは「列挙型変数Enumの使い方」。Enumによる超高効率Cells指定法を解説します。コーディング効率を劇的に向上してくれるExcelVBA屈指の機能なのでぜひ習得していってください!
マクロをテストする際、Debug.Printなど表示機能を使ったり、作業シートを削除せず残したりします。これをPublic定数を使って「If Isデバッグモード Then」で分岐することで、一括で実行管理することができます。
ByRefで定義された引数にただの値や定数を渡したらどうなるかを検証します。ByRefで定義された引数に値や定数を渡したときは、ByValと同じ動き(値が入った変数が新しく作られる)をしてくれます。
4月2日(土) 20:00~ Zoom勉強会に登壇します。「脱初心者!メンテナンスしやすいマクロの作り方」と題し、VBEの基本操作、シートの指定方法、変数(説明変数)、定数(Enum)をテーマに講演します。聞き専OKですのでお気軽にご参加ください。
マジックナンバーという用語をご存知でしょうか?Cells(R, 4) = Cells(R, 2) * Cells(R, 3)など、直接入力された数値を指す用語です。この3つの数値は、改修時の書き換えが面倒かつ危険でしかも読みづらいので、なくさなければいけない数字です。
Cells(R, ○)←VBAをやっている限り入力し続けることになるこのコードですが、この○を普段どうやって入力していますか?個数→P列→16という対応をいかに素早く考えるかがカギになるこの処理ですが、実はそれ以上に大事なことがあります。
マクロを作るとき、コード画面VBEはいろいろとオプションをいじることができますが、まずは真っ先に「変数の宣言を強制する」にチェックを入れておきましょう。この機能はいわば「自動スペルミス検知器」で、最も重要なオプションです。
マジックナンバーという用語をご存知でしょうか?Cells(R, 4) = Cells(R, 2) * Cells(R, 3)の2、3、4など、コード中に直接入力された数値を指す用語です。メンテ・可読性の点で、しっかりとプログラムを組むなら無くすべき数値です。
変数にmyRngとかmyNumってよく見ますよね。myRng.SpecialCells(xlCellTypeVisible).Value = myNumみたいなやつ。この「my」はどういう意味かというと、そのまま「自分で作った」とか「自分で使う」という意味です。
関数に引数を渡す際の渡し方である、ByVal(値渡し)とByRef(参照渡し)の違いを説明します。ざっくり説明すると、関数に値(引数)を渡すときに、「変数に書いてある情報だけを渡すのが値渡し(ByVal)」、変数をそのまま渡すのが参照渡し(ByRef)です。
変数・関数などの名づけ方のルールである、キャメル記法とハンガリアン記法の違いを説明します。単語の区切りを分かりやすくするためのルールがキャメル記法で、どんな変数かを分かりやすくする」ためのルールがハンガリアン記法です。
変数の名づけ方のルールである、システムハンガリアンとアプリケーションハンガリアンの違いを説明します。どちらも変数に接頭詞をつける命名で、lngApplePriceと変数の型を接頭するのが前者、yenApplePriceと変数の意味を接頭するのが後者です。
変数・関数などの名づけ方の種類(ルール)である、キャメルケースとスネークケースの違いを説明します。CamelCaseと、各単語の頭文字を大文字にするのがキャメルケース、snake_caseと、単語間にアンダーバーを入れるのがスネークケースです。
変数・関数などの名づけ方のルールである、キャメルケースとパスカルケースの違いを説明します。camelCaseと、先頭の単語は小文字で始めるのがキャメルケースで、PascalCaseと、先頭の単語は大文字で始めるのがパスカルケースです。
英訳してはいけない変数第1位のワークシート、第2位の列見出し名ときて、最後は「専門用語」です。ExcelVBAを用いて業務を効率化せんとするみなさんはその道のプロです。プロ同士の繊細な意思疎通を図るためにも、専門用語はそのまま変数名にしましょう。
今回は日本語変数に関するお話です。第1位のワークシートに続き、列見出し名が日本語だった場合は、その変数名をわざわざ英訳してはいけません。特にEnum定数などは、入力も日本語の方が簡単なコードですので、しっかり一致させたコードを書きましょう。
表形式のデータを定数で定義するとき、Enum(列挙型)定数が便利ですが、毎回書くのは面倒なので、マクロをマクロに書いてもらいましょう。見出し範囲を選択して実行すると、イミディエイトウィンドウにコードを生成して出力するマクロです。
ワークシートのオブジェクト名をマクロで設定する方法を紹介します。シートオブジェクト名での指定は便利なのですが、設定が面倒なので、それを「アクティブシートのオブジェクト名を、シート名と同じ名前にする」マクロでやってしまおうという魂胆です。
今回は日本語変数に関するお話です。単刀直入に、シート名が日本語だった場合に、その変数名をわざわざ英訳してはいけません。VBAではワークシート名もソースコードの一部です。同じオブジェクトの変数名は、すべてのコードで同じ単語を当てましょう。