No.3ベストアンサー
- 回答日時:
こんにちは。
vba_minaraiさん。もし、ご存知でしたら、お見捨てください。私自身も、1年目ぐらいに、掲示板で教わりました。
VBAで、Empty を使う時に、#2さんのお書きになったように、変数は、Variant型のみに用いられる、変数が空の状態です。いくつかの型の戻り値が発生し、数値の「0」が入れられたか、それとも「空」なのかを、「0」 か「Empty」 かで区分けする必要がある時に使います。ただ、一般的には、文字型でしたら、="" ですし、数値型でしたら、=0 で良いわけです。
私は、しばらくの間、
If ActiveCell.Value = Empty Then
こういうことは良いのだと思っていましたが、間違っていました。
この場合、セルが 0 で、True になりますね。
セル上が、="" の場合は、
If ActiveCell.Value = "" Then
で、Trueになります。
だから、これでは、Empty や ="" では取れません。以下のようにすべきはずなのです。
If IsEmpty(ActiveCell.Value) Then
では、VBA上で、Empty 値でなければならない場合はなにかというと、私自身、何かわかりません。前回の話の続きのような気もしますが、Variant型では、エラーが発生した時に使われるとは、ヘルプで書かれているかとは思いますし、今まで、私もそう信じていましたが、それは、受ける側の変数の型の問題であって、戻り値の期待される型に、文字型か数値型か曖昧な例にめぐり合ったことは、ないといっても過言ではありません。Array関数の配列の格納でも、Emptyは直接関係がありません。VBA上では、特殊な値だと考えてよいかもしれませんね。
見本:
Sub testMatchFunction()
Dim rng As Range
Dim i As Long
Dim rtn As Variant '戻り値
Set rng = Range("A1", Range("A65536").End(xlUp))
On Error Resume Next
rtn = Empty '戻り値を空にする。
rtn = WorksheetFunction.Match(Range("B1").Value, rng, 0)
On Error GoTo 0
If Not IsEmpty(rtn) Then
MsgBox Cells(rtn, 1).Address
End If
Set rng = Nothing
End Sub
改良型
このようにすれば、大きなメモリを使うVariant 型でなくてもよいわけです。戻り値がエラーであるかは関係がありません。時々、掲示板で、Cellsの中で、エラーを発生させて、トラップを取ろうとしている方がいますが、これは好手だとは思えません。なお、なぜ、Match関数を使うのかの意義は、また考えてみてください。
Sub testMatchFunctionR()
Dim rng As Range
Dim i As Long
Dim rtn As Long '戻り値
Set rng = Range("A1", Range("A65536").End(xlUp))
On Error Resume Next
rtn = 0 戻り値を0にする。
rtn = WorksheetFunction.Match(Range("B1").Value, rng, 0)
On Error GoTo 0
If rtn > 0 Then
MsgBox Cells(rtn, 1).Address
End If
Set rng = Nothing
End Sub
なお、単独のプロシージャでは、rtn 変数をEmptyや0にする必要はありませんが、ループやサブルーチンで、変数で、On Error トラップを使う前に、rtnに何も入れられていない状態に戻す必要があります。
この回答への補足
いつも、いつも有難うございます。
>もし、ご存知でしたら、お見捨てください。
勿体無い、お言葉有難うございます。
変数の型って時に厄介に思います。(変数の基本を理解した上での発言でない無謀な意見であることは既にご承知のことと思いますが!)直接、メモリーを操作すれば変数の型なんて概念は自己責任の範囲ですが、それでは、効率があまりにも悪すぎ、ある程度の制約を加えることにより総合的な効率を追求すべきだということも、またそれが効率的であうることは明白だと思います。アスキー文字で単純に比較することは簡単ですが、Emptyのような抽象的な表現では、いったい何を比較すれば良いのかとの疑問から質問しました。いつもながら的確なご指導感服いたします。有難うございます。
私も、= Empty でエラーが引っかかったので質問したのがきっかけでした。その場合の、エラーの原因は、帰り値が配列だったためのエラーでしたが、物事の本質は= Empty とは何か?に変わりありません。
今回ご指導頂いた内容は、まだ理解するに至っておりませんが、もう少しお時間を頂いてじっくり考えていただきたいと思います(すみません、今酔っ払っています!!爆笑)
メモリーがある値で初期化せず単に空間を割り振った状態で取り扱う必要がある場合、予期せぬトラブルが発生すると思います。特に、文字列などで、アドレスと、EOFのみを割り振った場合など顕著だと思います。重箱の隅をつつくような質問をすると思いますが今後ともよろしくお願いいたします。
尚、本件とはズレますが、以前にご指導頂いた、Extensibilityの件ですが、なんとか、"ThisWorkbook"同士の移動は出来るようになりました。(オブジェクト思考って凄いですね?)有難うございました。本当に、本当に助かっております。有難うございました。(前回、同様、お礼の部分は残しておきます。ご了承ください。)
No.1
- 回答日時:
値が入っていない状態を表す値です。
ある変数が、ByteでもBooleanでもIntegerでもLongでもCurrencyでもShortでもSingleでもDoubleでもStringでもArrayでもObjectでもNothingでも無い場合にこの値になります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 英語 取り込み詐欺は英語で何と言いますか? 4 2022/08/27 09:22
- Visual Basic(VBA) B列の最終行までA列をオートフィル 2 2022/09/05 05:50
- Visual Basic(VBA) セルが空白だった時の処理 5 2022/09/01 07:07
- 英語 意味を教えてください 4 2022/04/20 13:08
- Excel(エクセル) ExcelVBA メモ帳を起動し名前を付けて指定フォルダに保存 2 2022/04/18 13:15
- Visual Basic(VBA) VBA 最終行まで数式をコピーする 3 2023/01/03 15:44
- Excel(エクセル) Excelについて質問です。 シート1の検索値例えば *ABC* をシート2.3.4から検索して、シ 5 2023/02/17 23:30
- PHP 「if (!empty($_POST) ){ /」と「ポイント2★」の関連性? 1 2022/07/11 03:59
- PDF EXCEL ページを指定してPDF出力するVBAを教えてください。 2 2023/02/09 10:27
- Word(ワード) 質問タイトル Word2021で作成した文書を「ネットプリント」で写真画質印刷したい Word202 1 2022/08/23 13:20
このQ&Aを見た人はこんなQ&Aも見ています
-
これまでで一番「情けなかったとき」はいつですか?
これまでの人生で一番「情けない」と感じていたときはいつですか? そこからどう変化していきましたか?
-
歳とったな〜〜と思ったことは?
歳とったな〜〜〜、老いたな〜〜と思った具体的な瞬間はありますか?
-
あなたの「プチ贅沢」はなんですか?
お仕事や勉強などを頑張った自分へのご褒美としてやっている「プチ贅沢」があったら教えてください。
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
集中するためにやっていること
家で仕事をしているのですが、布団をはじめ誘惑だらけでなかなか集中できません。
-
VBA たまに変数がempty値になるエラー
Excel(エクセル)
-
Variant型で宣言してるのにEmptyになる
Visual Basic(VBA)
-
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
-
4
IF関数でEmpty値を設定する方法。
Excel(エクセル)
-
5
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
6
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
7
実行時エラー 438になった時の対処法を教えて下さい。
Visual Basic(VBA)
-
8
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
9
VBAでファイルを開くときにファイル名でワイルドカードを使用したいです
その他(プログラミング・Web制作)
-
10
VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます
Visual Basic(VBA)
-
11
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
12
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
13
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
14
【EXCEL】【VBA】空欄は飛ばして処理する方法を教えて下さい。
Excel(エクセル)
-
15
VBA Cのセルが空白でなかったら、Aのセルに順番に数値を入力
Visual Basic(VBA)
-
16
なぜこんな初歩的なVBAのIf文でエラーか発生して使えないのか、全く理解出来ません。誰か助けてくださ
Visual Basic(VBA)
-
17
VBAで文字列を数値に変換したい
Excel(エクセル)
-
18
複数の条件に合う行番号を取得するには
その他(Microsoft Office)
-
19
Rangeメソッドは失敗しました。globalオブジェクトについて
Excel(エクセル)
-
20
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
小数点以下を繰り上げたものを...
-
2つの数値のうち、数値が小さい...
-
EXCELで条件付き書式で空白セル...
-
リンク先のファイルを開かなく...
-
一番多く表示のある値(文字列...
-
爪が紫色?
-
エクセルで数式の答えを数値と...
-
エクセルで空白セルを含む列の...
-
VLOOKUP関数を使用時、検索する...
-
値が入っているときだけ計算結...
-
ある範囲のセルから任意の値を...
-
健否~書類の書き方~
-
彼女のことが好きすぎて彼女の...
-
納豆食べた後の尿の納豆臭は何故?
-
ワードのページ番号をもっと下...
-
エクセルのラベルの値(文字列...
-
エクセル指定した範囲からラン...
-
Excel 0目標に対して数字があ...
-
精子に血が・・・
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
彼女のことが好きすぎて彼女の...
-
EXCELで条件付き書式で空白セル...
-
爪が紫色?
-
ワードのページ番号をもっと下...
-
エクセル指定した範囲からラン...
-
VLOOKUP関数を使用時、検索する...
-
2つの数値のうち、数値が小さい...
-
小数点以下を繰り上げたものを...
-
EXCELで式からグラフを描くには?
-
風俗店へ行く前のご飯
-
リンク先のファイルを開かなく...
-
エクセルで数式の答えを数値と...
-
勃起する時って痛いんですか? ...
-
値が入っているときだけ計算結...
-
MIN関数で空白セルを無視したい...
-
精子に血が・・・
-
一番多く表示のある値(文字列...
-
エクセルのラベルの値(文字列...
-
白血球が多いとどんな心配があ...
おすすめ情報