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

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

新規登録して質問してみよう
ただいま回答率
85.48%
VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

5回答

12658閲覧

VBAのVariant型変数が初期値か否かの判定方法について

jinyo

総合スコア59

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2018/12/23 11:18

お世話になります。
VBAのVariant型変数が初期値か否かの判定方法について、ご教示お願いいたします。

dim 変数VAR

と、定義した変数があります。
この変数は、条件分岐によりExcelシートの表データが代入されている場合と、
空っぽの場合(初期値のEmptyのまま)の2つのパターンがあります。

Emptyの場合にプログラムを抜けたいので、

If 変数VAR = Empty Then

という判定式を記述しました。

しかし、この式ですと、emptyの場合は狙い通りの動きになりますが、変数の中に値が存在している場合に**「型が違う」**と怒られてしまいました。

この判定式の記述のしかたについてご教示頂きたく質問させていただきます。
何卒、よろしくお願いいたします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

値がEmptyかどうかの判定にはIsEmpty関数を使用します。

vba

1If IsEmpty(変数VAR) Then

補足

比較などでEmptyを使用した場合、Emptyは0又は空文字列("")として扱われます(値がEmpty以外の場合とも一致する)。

また、VBAでは配列は比較演算子で比較できないため、If 配列 = ○○ Thenとすると型が一致しません。のエラーが発生します。

投稿2018/12/23 11:30

imihito

総合スコア2166

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jinyo

2018/12/23 12:12

エラーの内容についてまでご親切に教えていただき、非常にわかりやすいご回答ありがとうございました。ベストアンサーとさせていただきたかったのですが、操作を誤り、できなくなってしまいました。本当にすみません。ありがとうございました。
TanakaHiroaki

2018/12/23 12:14

別解を示したのですが、私の尊敬する imihitoさんを差し置いてベストアンサーという形となり申し訳なく思います。
imihito

2018/12/23 12:17

ベストアンサーはどこでも。 結果として役に立ったのであれば何よりです。
guest

0

ベストアンサー

VarTypeを用いると、バリアント型変数のその時点の内部処理形式がわかります。

VBA

1If VarType(変数VAR) = vbEmpty Then

<追記>
imihitoさんより VarTypeを使う場合、vbEmpty と比較するとのご指摘を受け、
回答を修正しました。
(正)vbEmpty
(誤)Empty

投稿2018/12/23 12:05

編集2018/12/23 12:24
TanakaHiroaki

総合スコア1063

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

imihito

2018/12/23 12:14

重箱の隅をつつくようで恐縮ですが、`Empty`ではなく`vbEmpty`ではないでしょうか? `vbEmpty`の値は0なので結果として問題は無いですが
TanakaHiroaki

2018/12/23 12:16

ご指摘ありがとうございます。 その通りなので回答を修正します。
jinyo

2018/12/24 10:07

TanakaHiroaki様、 他の方とは別のアプローチからの解を頂きましてありがとうございました。 今回はIsEmpty関数による方法を採用させていただきましたが、VarType関数もVariant型変数の判定に、とても役に立ちそうですね。一応仕様の確認してみました。 頭の片隅に置いておきます。ありがとうございました!
guest

0

IsEmpty 関数はどうでしょうか

投稿2018/12/23 11:27

YAmaGNZ

総合スコア10258

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

IsEmpty関数をつかいましょう

投稿2018/12/23 11:25

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

皆様、早速のご回答ありがとうございます。
IsEmpty関数によって、エラーが発生することなく、配列の判定をすることができました。

今回は、エラーの原因まで併せてご教示くださった imihito様 のレスをベストアンサーとさせていただきます。ありがとうございました。


<追記>
・・・・と、したはずが、別の方をベストアンサーにしてしまいました。。。
まだ、こちらのサイトの扱い方に慣れておらず、操作ミスすみません。。。。。。。。。。。。。

投稿2018/12/23 12:06

編集2018/12/23 12:10
jinyo

総合スコア59

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問