01-VBA

演算子|Excel VBA (Part.7)【その他の演算子】Is演算子 | 現役エンジニア&プログラミングスクール講師

目標

VBAのIs演算子について理解し利用できる

演算子には算術演算子・比較演算子・論理演算子・代入演算子・連結演算子があります。この記事ではオブジェクトの比較を行ってくれるIs演算子ついて書いています。

Is演算子の概要と利用方法

Is演算子とは

それぞれの変数が同じオブジェクトを参照しているかを確認してTrue/Falseの値を返す比較演算子です。参照のイメージが湧きづらい場合は次の記事を参考にして下さい。

ExcelVBAの変数 (Part.3) バリアント型編 | 現役エンジニア&プログラミングスクール講師ExcelVBAのバリアント型変数の使い方について説明しています...

Is演算子の構文と利用方法

Is演算子の構文

次の比較が合えばTrue  =『オブジェクト変数1』 Is 『オブジェクト変数2』

次の比較が違えばFalse =『オブジェクト変数1』 Is 『オブジェクト変数2』

Microsoft Learnでは以下のように表記されています。

result = object1 Is object2

resultに「True」か「False」が入ります。

object1に1つ目の変数を指定します。 object2に2つ目の変数を指定します。

objectに入るのものが『変数』というところが注目ポイントです。

Is演算子の利用例(1)

Worksheetオブジェクトの参照を比較します。
Sub IsOperator1()

    Dim ws1 As Worksheet
    Set ws1 = Worksheets(1)
    
    Dim ws2 As Worksheet
    Set ws2 = ws1
    
    Dim ws3 As Worksheet
    Set ws3 = Worksheets(1)
    
    MsgBox ws1 Is ws2
    MsgBox ws1 Is ws3
    
End Sub

ws2にws1を直接代入したときの2つの参照先は同じか?

実行結果:Trueを返します。

ws3にはws1からの代入ではなく、Worksheet番号を利用してws1と同じシートを代入。この時の2つのオブジェクトの参照先は同じか?

実行結果:Trueを返します。

Is演算子の利用例(2)

Rangeオブジェクトの参照を比較します。
Sub IsOperator2()

    Dim cell1 As Range
    Set cell1 = Range("A1")
    
    Dim cell2 As Range
    Set cell2 = cell1
    
    Dim cell3 As Range
    Set cell3 = Range("A1")
    
    MsgBox cell1 Is cell2
    MsgBox cell1 Is cell3

End Sub

cell2にcell1を直接代入したときの2つの参照先は同じか?

実行結果:Trueを返します。

cell3にはcell1からの代入ではなく、Range(“A1”)を指定してcell1と同じRangeオブジェクトを代入。この時の2つのオブジェクトの参照先は同じか?

実行結果:Falseを返します。

※Rangeオブジェクトを利用する時はWorksheetオブジェクトを扱うときと異なった結果を返しました。Rangeオブジェクトを代入する時は代入の仕方によって結果が変わることに注意が必要となります。

Is演算子の利用例(3)

Is演算子の利用例(3)ではクラスオブジェクトを扱ってみます。クラスについての記事はまた別の機会に書きたいと思います。

クラスモジュールの作成「挿入」タブ内の「クラスモジュール」を選択します。

プロジェクトエクスプローラーにクラスモジュールが作成されます。

今回作成した「Class1」をダブルクリックするとClass1のエディタがコードウィンドウに表示されます。また左下にはClass1のプロパティウィンドウが表示されます。

プロパティウィンドウのオブジェクト名の変更をします。今回は「Car」と変更します。

クラスモジュールにプログラムを記述します。

Option Explicit

Private this_carModel As String
Private this_carSheets As Integer
Private this_engineDisplacement As Integer

Public Function Init(carModel) As Car

    Set Init = Me
    this_carModel = carModel
    this_carSheets = 5
    this_engineDisplacement = 1500

End Function

Public Sub syokumuSitumonn()

    MsgBox this_carModel
    
End Sub

Public Sub carAccelerator()
    
    MsgBox "加速します"
    
End Sub

Public Sub carStop()
    
    MsgBox "止まります"
    
End Sub

作成したクラスモジュールを使用して2つのオブジェクトを作成します。作成したオブジェクトの片方へ、もう片方のオブジェクトの参照を代入します。

Option Explicit

Sub IsOperator3()
    'パパの車をCarクラス型で宣言します。
    Dim Papa_no_Carolla As Car
    '同様に僕の車をCarクラス型で宣言します。
    Dim BokugaNoru_Carolla As Car
    
    'パパの車のインスタンスを作成します。(インスタンスはクラスモジュールのコピーと考えてください)
    Set Papa_no_Carolla = New Car
    'インスタンス作成後にパパの車のナンバーを登録します。
    Papa_no_Carolla.Init "CarNum123_4567"

    MsgBox "パパが車で外出します。"
    Papa_no_Carolla.carAccelerator
    Papa_no_Carolla.carStop
    MsgBox "車のナンバーを確認。"
    Papa_no_Carolla.syokumuSitumonn
    
    '僕の車オブジェクトを作成します。代入はパパの車オブジェクト(先ほどインスタンス化したもの)です。
    Set BokugaNoru_Carolla = Papa_no_Carolla
    MsgBox "僕が車で外出します。"
    BokugaNoru_Carolla.carAccelerator
    BokugaNoru_Carolla.carStop
    MsgBox "車のナンバーを確認。"
    BokugaNoru_Carolla.syokumuSitumonn
    
    If Papa_no_Carolla Is BokugaNoru_Carolla Then
        MsgBox "同じ車を利用しています。"
    End If

    Set Papa_no_Carolla = Nothing
    Set BokugaNoru_Carolla = Nothing

End Sub

実行結果:

‘インスタンス作成時にパパの車のナンバーを登録します。
Papa_no_Carolla.Init “CarNum123_4567”

ここで登録したナンバーが「僕の車オブジェクト」のナンバーと同じになります。最後のIs演算子の条件ではTrueを返しています。つまり、同じオブジェクトを参照しているということになります。利用例(3)が難しく感じた方も(1)と(2)の違いが分かれば十分です。

今回の内容は以上となります。

初心者も実践で通用!「VBA・VBS」おすすめ書籍5選 | 現役エンジニア&プログラミングスクール講師「VBA・VBS」初心者の方が実践業務の中でそれらを活用しt活躍できるために必要な知識を習得できる書籍を紹介しています。ページの下部には「おすすめのITスクール情報」「おすすめ求人サイト」について情報を掲載中。...

ブックマークのすすめ

「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。

「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】| 現役エンジニア&プログラミングスクール講師「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】について解説している記事です。削除方法も掲載しています。...
【パソコン選び】失敗しないための重要ポイント | 現役エンジニア&プログラミングスクール講師【パソコン選び】失敗しないための重要ポイントについての記事です。パソコンのタイプと購入時に検討すべき点・家電量販店で見かけるCPUの見方・購入者が必要とするメモリ容量・HDDとSSDについて・ディスプレイの種類・バッテリーの持ち時間や保証・Officeソフト・ウィルス対策ソフトについて書いています。...
RELATED POST
01-VBA

ExcelVBAの変数 (Part.2) オブジェクト変数編 | 現役エンジニア&プログラミングスクール講師

2022年9月14日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

初めてのExcelVBA:開発用フォルダの作成 | 現役エンジニア&プログラミングスクール講師

2022年12月10日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

Excel VBA まとめ | 現役エンジニア&プログラミングスクール講師

2023年2月18日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

制御構文|Excel VBA (Part.4)【Select Case】| 現役エンジニア&プログラミングスクール講師

2022年11月19日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

Excel VBA の「オブジェクト活用」(Part.4)【ブック活用編】| 現役エンジニア&プログラミングスクール講師

2022年12月17日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

演算子|Excel VBA (Part.1)【算術演算子・代入演算子】| 現役エンジニア&プログラミングスクール講師

2022年10月24日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site