このページの内容について
このページは、VBAエキスパート(ExcelVBAベーシック)試験合格講座の第三回記事です。第公式テキスト第4章「VBAの構文」第9章「シートとブックの操作」の内容について解説します。1時間の講義でお話する程度の分量です。講座受講者の復習での利用を想定しています。
演算子
演算子とは
算数や数学で使用した四則演算「+」「-」「×」「÷」のような機能をプログラミング上で実現するために使用するものを演算子と呼びます。
演算子の分類
算術演算子 | 四則演算などの計算を実施し、計算結果を返します。 |
比較演算子 | 左右の比較をし、True/Falseを返します。 |
文字列結合演算子 | 左右の文字列を結合し、結合結果を返します。 |
論理演算子 | Andなど論理演算を実施し、True/Falseを返します。 |
代入演算子 | 右の値やオブジェクトを左の変数などに格納します。 |
以下で、各演算子について説明とサンプルを並べます。しかし、この場ですべて覚える必要はありません。使っているうちに覚えます。挙動を確認したいときなどに適宜参照してください。
算術演算子
説明とサンプルコード
+
Private Sub Test_Plus()
Debug.Print 10 + 15
End Sub
左と右の数値を足し算してその結果を返します。
–
Private Sub Test_Minus()
Debug.Print 10 - 15
End Sub
左の数値から右の数値を引いた結果を返します。
/
Private Sub Test_Quotient()
Debug.Print 75 / 9
End Sub
左の数値を右の数値で割った結果を返します。
\
Private Sub Test_Quotient2()
Debug.Print 75 \ 9
End Sub
左の数値を右の数値で割った結果を返しますが、「/」と異なり整数部のみ返します。四捨五入はされません。小数点以下を切り捨てます。
*
Private Sub Test_Product()
Debug.Print 11 * 7
End Sub
左と右の数値を掛け算した結果を返します。
^
Private Sub Test_Power()
Debug.Print 11 ^ 7
End Sub
べき乗を求めます。上記の例だと11の7乗を計算して返します。「^」は私のキーボードでは「BackSpace」から左に2個「へ」の位置にあります。読み方は「キャレット」です。
Mod
Private Sub Test_Mod()
Debug.Print 75 Mod 9
End Sub
これも演算子です。Modは左の数値を右で割ったときの余りを求めます。
算術演算子の優先順位
Private Sub Test_Priority()
Debug.Print 3 + 4 * 5
Debug.Print (3 + 4) * 5
End Sub
算術演算子は数学の計算と同様、並べて記述することができ、左から順に実行されます。その時、優先順位は数学と同様、「+」「-」が他の演算子より後に実行されます。また、式を「()」で囲むと演算子の優先順位に関わらす先に実行されます。なお「15(1+3)」のように「*」を省略することはできません。
比較演算子
説明とサンプルコード
=
Private Sub Test_Equal()
Debug.Print 77 = 77
Debug.Print 77 = 78
Debug.Print "あいうえお" = "あいうえお"
Debug.Print "かきくけこ" = "あいうえお"
End Sub
左右が同じ場合はTrue、異なる場合はFalseを返します。算術演算子とは異なり文字列に対しても実行できます。
<
Private Sub Test_LessThan()
Debug.Print 77 < 77
Debug.Print 77 < 78
End Sub
左の値が右の値より小さい場合はTrue、同じもしくは大きい場合はFalseを返します。文字列にも使用できますが、意図した結果を得るのは難しいため、この講座では解説しません。
<=
Private Sub Test_LessThanOrEqualTo()
Debug.Print 77 <= 77
Debug.Print 77 <= 78
Debug.Print 77 <= 76
End Sub
左の値が右の値と同じか小さい場合はTrue、大きい場合はFalseを返します。「≦」とは書けませんので注意してください。VBEは「<=」「=<」どちらで書いても正しい方に自動補正してくれます。
>
Private Sub Test_GreaterThan()
Debug.Print 77 > 77
Debug.Print 77 > 78
Debug.Print 77 > 76
End Sub
左の値が右の値より大きい場合はTrue、同じもしくは小さい場合はFalseを返します。文字列にも使用できますが、意図した結果を得るのは難しいため、この講座では解説しません。
>=
Private Sub Test_GreaterThanOrEqualTo()
Debug.Print 77 >= 77
Debug.Print 77 >= 78
Debug.Print 77 >= 76
End Sub
左の値が右の値と同じか大きい場合はTrue、小さい場合はFalseを返します。「≧」とは書けませんので注意してください。VBEは「>=」「=>」どちらで書いても正しい方に自動補正してくれます。
<>
Private Sub Test_NotEqual()
Debug.Print 77 <> 77
Debug.Print 77 <> 78
Debug.Print "あいうえお" <> "あいうえお"
Debug.Print "かきくけこ" <> "あいうえお"
End Sub
左と右の値が等しくない場合にTrue、等しい場合はFalseを返します。文字列にも使用できます。「!=」とは書けません。
Is
Private Sub Test_Is()
Debug.Print ThisWorkbook Is Workbooks(1)
Debug.Print ThisWorkbook Is Nothing
End Sub
オブジェクト同士を比較します。左右のオブジェクトが等しい場合にTrue、異なる場合にFalseを返します。オブジェクトについては後述します。
Like
Private Sub Test_Like()
Debug.Print "あいうえお" Like "あ*"
Debug.Print "あいうえお" Like "あ????"
End Sub
ワイルドカードを使用して、左右の文字列を比較します。ワイルドカードを含む文字列は右に配置します。一致する場合はTrue、一致しない場合はFalseを返します。
文字列結合演算子
説明とサンプルコード
&
Private Sub Test_JoinStr()
Debug.Print "あいうえお" & "かきくけこ"
End Sub
左右の文字列を結合して返します。
+
Private Sub Test_JoinStr2()
Debug.Print "あいうえお" + "かきくけこ"
End Sub
「&」と全く同じ結果を返します。しかし「+」は算術演算子として足し算の機能も持っているため、数値同士を結合使用すると足し算の結果を返します。事故の元なので「&」を使用するようにしましょう。
論理演算子
説明とサンプルコード
And
Private Sub Test_And()
Debug.Print True And True
Debug.Print True And False
Debug.Print False And True
Debug.Print False And False
End Sub
論理積と呼びます。それぞれTrueの場合のみ、Trueを返します。
Or
Private Sub Test_Or()
Debug.Print True Or True
Debug.Print True Or False
Debug.Print False Or True
Debug.Print False Or False
End Sub
論理和と呼びます。いずれかがTrueの場合に、Trueを返します。
Not
Private Sub Test_Not()
Debug.Print Not True
Debug.Print Not False
End Sub
論理否定と呼びます。論理値を反転させます。
Eqv
Private Sub Test_Eqv()
Debug.Print True Eqv True
Debug.Print True Eqv False
Debug.Print False Eqv True
Debug.Print False Eqv False
End Sub
論理等価と呼びます。それぞれの値が等しいときにTrueを返します。
Imp
Private Sub Test_Imp()
Debug.Print True Imp True
Debug.Print True Imp False
Debug.Print False Imp True
Debug.Print False Imp False
End Sub
論理包含(ろんりほうがん)と呼びます。結果についてはネット記事を参照してください。
Xor
Private Sub Test_Xor()
Debug.Print True Xor True
Debug.Print True Xor False
Debug.Print False Xor True
Debug.Print False Xor False
End Sub
排他的論理和と呼びます。それぞれの値が異なる場合に、Trueを返します。
代入演算子
説明・サンプルは省略します。「=」右の値を左に代入します。
オブジェクト
オブジェクトとは
VBAにおいてオブジェクトとは「機能(メソッド)」と「状態(プロパティ)」の集合体のことを指します。
機能(メソッド)
メソッドとは
メソッドとは関数のようなもので引数を渡して戻り値を得たり、呼び出すことでなにか動作やアクションが発生したりします。
メソッドの呼び出し方
オブジェクトの中のメソッドを呼び出す(使用する)ためには、「オブジェクト名.メソッド名」と記述します。引数がある場合は続けて「()」内に記述します。
サンプルコード(クリックでコピー)
Private Sub Test_Method()
Call VBA.MsgBox("「VBA」というオブジェクトのメソッドである「MsgBox」を呼び出してメッセージを表示します。")
End Sub
オブジェクトの省略
ExcelVBA(マクロ)では一部のオブジェクトは省略して記載することができます。上記のMsgBox関数はメッセージボックスを表示させるVBAに備え付けの関数ですが、実体は「VBA」というオブジェクトに含まれるメソッドです。しかしこの「VBA」というオブジェクトは特別に省略して記述することが認められており「MsgBox」と記述すると、マクロ実行時に「VBA」オブジェクトであることを自動で判定し実行されます。
状態(プロパティ)
プロパティとは
プロパティとはオブジェクトの持っている値のことです。また、オブジェクトの中にはオブジェクトが入れ子構造で入っていることもあります。便宜上、オブジェクトの中のオブジェクトもプロパティに分類されます。
プロパティの確認方法
メソッドと同様「オブジェクト名.プロパティ名」で参照することができます。
サンプルコード(クリックでコピー)
Private Sub Test_Property()
Debug.Print ThisWorkbook.Name
End Sub
コレクション
コレクションとは
コレクションとは同じオブジェクトの集合体のことです。
コレクションの例
「ThisWorkbook」オブジェクトには「WorkSheets」という「WorkSheet」オブジェクトの集合体が含まれています。
コレクションの参照方法
コレクションはオブジェクトの集合体なので、コレクションの中のオブジェクトを特定してメソッドやプロパティを呼び出すことができます。「コレクション名(インデックス)」でオブジェクトを特定します。
サンプルコード(クリックでコピー)
Private Sub Test_Collection()
Debug.Print ThisWorkbook.Worksheets(1).Name
End Sub
上記サンプルでは「ThisWorkbook」の「WorkSheets」コレクションの一番目のオブジェクトの「Name」プロパティを取得・表示しています。
コレクションもオブジェクト
ややこしいポイントですが、コレクションもオブジェクトの一種です。そのためコレクション自体もメソッドとプロパティを持っています。
サンプルコード(クリックでコピー)
Private Sub Test_Collection2()
Call ThisWorkbook.Worksheets.Add
Debug.Print ThisWorkbook.Worksheets.Count
End Sub
上記サンプルでは「ThisWorkbook」の「WorkSheets」コレクションの「Add」メソッドにより、ブックへシートを追加し、その後「Count」プロパティでWorkSheetオブジェクトの数を取得・表示しています。
ブックオブジェクト
ThisWorkbook
マクロが動作しているブックは「ThisWorkbook」で指定することができます。このオブジェクトはプロジェクトエクスプローラーから目視できます。
ActiveWorkbook
操作中(アクティブな)ブックのことです。マクロ動作中のユーザーの操作によって変更されることがあります。
Workbooks
ThisWorkbook以外のブックはWorkbooksコレクションからアクセスできます。
ファイル名による指定
拡張子付きのファイル名を文字列で指定します。新規作成された未保存のブックでは拡張子は付けません。
Workbooks("abc.xlsx")
Workbooks("Book1")
インデックスによる指定
ブックオブジェクトはExcelによって開かれた順番でインデックスが振られています。最初のブックは「1」です。
Workbooks(1)
ブックの操作
ブックの新規作成
サンプルコード(クリックでコピー)
Private Sub Test_WorkbooksAdd()
Call Workbooks.Add
End Sub
実行結果
上記サンプルコードを実行すると新しいブックが一つ作成されます。
ブックを開く
サンプルコード(クリックでコピー)
Private Sub Test_WorkbooksOpen()
Call Workbooks.Open(ThisWorkbook.Path & "\" & ThisWorkbook.Name)
End Sub
実行結果
上記サンプルコードを実行すると実行中のマクロが記述されているブックを開こうとします。つまり現在のExcelの仕様上、何も起きません。なお、保存されていないブック上で動作している場合は、エラーとなります。
ブックの保存
上書き保存
サンプルコード(クリックでコピー)
Private Sub Test_WorkbookSave()
Call Workbooks(1).Save
End Sub
実行結果
上記サンプルコードを実行すると、ブックを上書き保存します。未保存のブックであれば保存のメッセージが立ち上がります。
名前を付けて保存
名前を付けて保存する場合、ファイル名を含むパスを指定します。
サンプルコード(クリックでコピー)
Private Sub Test_WorkbookSaveAs()
Call Workbooks(1).SaveAs("C:\Users\sample.xlsm")
End Sub
実行結果
上記サンプルコードを実行すると、1番目のブックに名前を付けて保存します。
ブックを閉じる
保存して閉じる
サンプルコード(クリックでコピー)
Private Sub Test_WorkbookCloseTrue()
Call Workbooks(1).Close(True)
End Sub
実行結果
上記サンプルコードを実行すると、1番目のブックを保存してから閉じます。マクロを実行中のブックであっても閉じられます。
保存せず閉じる
サンプルコード(クリックでコピー)
Private Sub Test_WorkbookCloseFalse()
Call Workbooks(1).Close(False)
End Sub
実行結果
上記サンプルコードを実行すると、1番目のブックを保存せずに閉じます。
Comment