学習日:2024/07/11
参考書:ExcelVBA本格入門 技術評論社(著者 大村あつし)
5-1から5-4まで(P112-126)
【学習内容のまとめ】
ブック名をメッセージボックスに表示する
myWBName = Workbooks(1).Name → 最初に開いたブックのNameプロパティを取得して変数に代入
MsgBox "最初に開いたブックは” & myWBName & "です” → 変数に格納された値を表示
※ブック名をメッセージボックスに表示すること自体は変数を使用せずとも可能
MsgBox関数で文字列と変数を連結する
固定文字列は"”(ダブルクォーテーション)で囲み、&演算子で連結する
※変数は””で囲まない
文字列を連結するときは&演算子を使い、数値を加算するときは+演算子を使う
MsgBox 1 + 1 → 実行結果は2
MsgBox 1 & 1 → 実行結果は11
- 算術演算子 → +(加算),-(減算),*(乗算),/(除算),^(べき乗),¥(除算の商を返す),Mod(除算の余りを返す)
- 比較演算子 → If文などの中で条件の比較を行うときに使用
- 文字列連結演算子 → &演算子
- 論理演算子 → And演算子、Or演算子
※Valueプロパティは省略して記述することも可能だが基本的には省略すべきでない
自分流の名前付け規則を作る
重要な事項3点
- 変数であることが明確である名前を付ける
- マクロのタイトルやVBAのキーワードと一致しない名前を付ける
- どのような値を格納するための変数なのかが連想できる名前を付ける
VBAのキーワードにはmyで始まるものがないため重複しないためおすすめ
※マクロのタイトルとかぶってないかは注意
※日本語の変数名はつけないほうがベター
変数の明示的な宣言とは?
スペルミスがあるマクロ
myWBName = Workbooks(1).Name
MsgBox "最初に開いたブックは” & myWBNama & "です” → 変数名をスペルミスしているためメッセージボックスには変数に格納した値は表示されない
VBAはキーワード以外の用語をすべてユーザーが独自に定義した変数と判断して処理をするため、スペルミスではエラーがでない
そのため、あらかじめ変数を宣言することで、宣言されていない用語はエラーが出るように設定する → 変数の明示的な宣言
変数を明示的に宣言する(1) - Dimステートメント
宣言されていない変数(スペルミス)をエラーと判断する機能を設定するには、Dimステートメントで変数を宣言する
変数を明示的に宣言する(2) - Option Explicitステートメント
さらに、モジュールの先頭にOption Explicitステートメントを記述すると、Dimステートメントで宣言した変数以外の用語を使うことができなくなる → スペルミスがエラーでわかるようになる
Option Explicitステートメントを自動的に記述する
VBE起動 → ツール → オプション → 編集パネルの変数の宣言を強制するにチェックしてOK
変数のデータ型を宣言する
Dim myWSCnt As Integer → データ型をInteger(整数型)で宣言
myWSCnt = ActiveWorkbook.Worksheets.Count → 整数型以外のデータ型の値が入るとエラーが出る
MsgBox myWSCnt
Dim 変数 As データ型 → Asキーワードを使った変数のデータ型を宣言する構文
データ型の宣言によりプログラミングミスを回避する
宣言された型と違う種類のデータを変数に代入すると、マクロ実行時に変数のデータ型が一致しないというエラーを返す
主なデータ型
- バイト型(Byte) → 0~255の正の整数値
- ブール型(Boolean) → TrueまたはFalse
- 整数型(Integer) → -32,768~32,767の整数値
- 長整数型(Long) → -Integerよりも桁の大きな整数値。2,147,483,648~2,147,483,647
- 通貨型(Currency) → Longよりも桁の大きな小数点を含む数値。-922,337,203,685,477.5808~922,337,203,685,477.5807
- 単精度浮動小数点数型(Single) → 小数点を含む数値
- 倍精度浮動小数点数型(Double) → Singleよりも桁の大きな小数点を含む数値
- 日付型(Date) → 日付と時刻
- 文字列型(String) → 文字列
- オブジェクト型(object) → オブジェクトへの参照
- バリアント型(Variant) → あらゆる種類の値
文字列型 - String
Dim myWBName As String → 変数を文字列型で宣言
myWBName = Workbooks(1).Name
MsgBox "最初に開いたブックは” & myWBName & "です”
※文字列型で宣言した変数に数値を代入しても文字列として扱われる
バリアント型 - Variant
整数、文字列、日付などあらゆるデータを格納できるが、どのようなデータを入れる変数であるかがわからなくなるため基本的には使用しないデータ型
データ型を省略して変数を宣言すると、その変数はバリアント型になる
オブジェクト型(1) - Setステートメント
Dim myWSheet As Worksheet → myWSheetをオブジェクト型の変数として宣言
Set myWSheet = Workbooks("Dummy.xlsx").Worksheets(”Sheet2”) → Setステートメントを使ってオブジェクト型変数にオブジェクトを代入
myWSheet.Range(”A1:D10”).Value = "ABC” → 変数myWSheetに対してオブジェクトを代入しているのでRangeを使うことができる
※Setステートメントは変数にオブジェクトを格納するためのキーワード
オブジェクト型(2) -固有オブジェクト型と総称オブジェクト型
オブジェクトの種類を特定して宣言する → 固有オブジェクト型 → エラーを発見しやすいなどのメリットがある
Dim myWBook As Workbook
Dim myWSheet As Worksheet
Dim myCell As Range
オブジェクトの種類を特定せずに宣言する → 総称オブジェクト型
Dim myWBook As Object
Dim myWSheet As Object
Dim myCell As Object
複数の変数を1行で宣言する
Dim myWBCnt As Integer, myWSCnt As Integer
※データ型の宣言は1つの変数に対して1つずつ宣言する、同じデータ型でもまとめて宣言するということはできない
昨今の風潮として、大は小を兼ねるということでIntegerはLong、SingleはDoubleと大きな値を扱えるデータ型のみを使う場合もあるが、それで問題はない