質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.35%

Is はどのようなときに使うのですか

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 6,190

umomo

score 10

Isの使い方を教えていただきたいです

ある参考書でVBAの勉強を始めた初心者です。
Isはどのようなときに使うのか、どのように使うものなのか教えていただきたいです。

参考書のコードでIf~Then~Elseの条件式のなかに、Isが出てきました。
(If A Is Nothing Then)
あまりに基本的なことなのか、その参考書の解説に詳しく載っていません。オブジェクトの比較に使う比較演算子とだけ載っています。

「こういうときに使って、こういうときにはこれは使わないよ。なぜなら〜」などと答えていただけると、ありがたいです。

初質問です。
よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

VBAにおける「オブジェクト」は理解していますでしょうか。

わかっている前提で回答しますが、 Is 演算子は、「オブジェクト同士の比較」で使う演算子です。
例えば数値型の変数 lngA と lngB があった場合、この比較をする場合は

If lngA = lngB Then

であることは理解できるでしょうか。
この = の左右がオブジェクト型のものである場合、 = の代わりに Is が利用されます。
If A Is Nothing Then ここでいう変数 A がオブジェクトである場合、ということです。
※なお、Nothing は「空」を示す特別なオブジェクトです。


 追記

以下を読むと多分とても混乱するので先に回答らしきものを書いておきます。
Is を使う機会は変数を Nothing と比較する場合がほとんどです。
また、おそらく当面は理解は後回しでいい箇所、だと思います。

そのうえで少し大雑把な説明です。

  • 変数
  • データ型
  • (データ型の内の)オブジェクト型

という言葉の理解がキーとなります。
以下の説明では不足だと思いますので、そのあたりをキーワードに調べてみてください。

 変数

VBAに限らずプログラム言語では、処理を汎用化するために「変数」というものを利用します。
簡単な理解のためにこれは数学で出てきた x とか y と同じようなもので、何かが入る箱、くらいの意味で考えてください。
箱の中身は様々なデータです。

 データ型

数学の場合、この変数には常に数値が入りましたが、プログラム言語の場合は文字列が入ったり日付が入ったり、様々なものがデータとして格納されます。
この、中身にどういったものが入っているか、というのが「データ型」です。
例えばVBAで

Dim strA As String

というように変数を宣言する、ということをするのですが、これは、

strA という変数をこれから使います。
strA には文字列(String)が入ります。

という宣言になります。

 オブジェクト型

データ型には文字列のほかに、整数(Integer や Long)、小数も含んだ数値(SingleやDouble)、日付・日時などの他に「オブジェクト型」があります。
オブジェクト型というのは、それ以外のデータ型が1つのデータしか格納できないのに対して、関連性の強い複数のデータを1つのデータの塊として扱えるものです。

VBAの場合、例えばExcelの「ワークシート」や「セル」はオブジェクトとして扱われます。
例えば、

・セルの値
・セルの背景色

等「セル」というものに対して様々なデータがありますよね。
これらをまとめて「セル」という1つのオブジェクトとして扱います。

このように「モノ」を管理の単位として考え、そのものに付随する複数のデータを1つにまとめて扱うものが「オブジェクト」です。

 参考

http://officetanaka.net/excel/vba/variable/11.htm あたりが参考になるかもしれません。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/06/12 23:18

    VBAは情報量はそれなりにある割に、核心的な回答が見つかりにくい言語ですのでいろいろ探すのも大変だと思いますが、頼りすぎない程度に使えば便利なものですので頑張って習得してくださいね。

    キャンセル

  • 2016/06/13 00:57

    本質ではない指摘になりますが、 kaz.Suenaga さんの回答の追記に
    「Is を使う機会は変数を Nothing や Nullと比較する場合がほとんどです。 」
    とありますが、VBAにおけるNullはObjectではないため誤解を招く可能性があります。
    Nullと比較する場合はIs演算子ではなくIsNull関数を使うことになります。

    キャンセル

  • 2016/06/13 01:04

    そうですね、IsNull関数での評価になりますね。
    (SQLと混じりました)

    Nullは消しておきますね。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る