EB000003_VBAエキスパート(ExcelVBAベーシック)合格講座/第三回:演算子とオブジェクト

VBAエキスパート(ExcelVBAベーシック)合格講座/第三回:演算子とオブジェクト ExcelVBA Basic

このページの内容について

このページは、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を返します。算術演算子とは異なり文字列に対しても実行できます。

他のプログラミング言語からやってきた方にとっては違和感があるかと思います。後に説明する代入演算子「=」と綴りが同じためです。VBAでは用いられる場所によってどちらの演算子かが判定されています。他のプログラミング言語では「==」と表現されることが多いです。

<
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」オブジェクトの「Name」プロパティの値を取得し、イミディエイトウィンドウに表示しています。「ThisWorkbook」はブックの作成時に最初から用意されているオブジェクトのひとつです。プロジェクトエクスプローラーから目視できます。

コレクション

コレクションとは

コレクションとは同じオブジェクトの集合体のことです。

コレクションの例

「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オブジェクトの数を取得・表示しています。

コレクションは必ずしも複数のオブジェクトが含まれているとは限りません。現在のExcelのデフォルト設定では、ブックを立ち上げた時点でシートは1つしかありません。そのため、WorkSheetsコレクションの中にもWorkSheetオブジェクトは1つしか入っていない状態です。サンプルコードを書き換えてシート追加前の状態を「Count」プロパティで確認してみてください。

VBAエキスパート試験対策記事

当サイトでは、オデッセイコミュニケーションズ社が運営する試験であるVBAエキスパートExcel VBA ベーシックExcel VBA スタンダード)の出題範囲をベースに用語や各種関数の解説などを行っています。試験合格に向けて必須と言われる公式テキストに沿って解説をしています。受験をするか悩んでいる方、テキストとは別視点の解説を見てみたい方、受験はしないがExcelVBA(マクロ)に興味がある方へ向けた記事です。

Comment