Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10364 / 13644 ツリー ←次へ | 前へ→

【22269】0の扱いで悩んでいます いよかん 05/2/14(月) 13:06 質問[未読]
【22270】Re:0の扱いで悩んでいます つん 05/2/14(月) 13:27 回答[未読]
【22271】Re:0の扱いで悩んでいます いよかん 05/2/14(月) 13:50 質問[未読]
【22272】Re:0の扱いで悩んでいます つん 05/2/14(月) 13:55 回答[未読]
【22274】Re:0の扱いで悩んでいます いよかん 05/2/14(月) 14:16 お礼[未読]
【22288】Re:0の扱いで悩んでいます sa 05/2/15(火) 9:40 発言[未読]
【22291】Re:0の扱いで悩んでいます いよかん 05/2/15(火) 11:18 お礼[未読]

【22269】0の扱いで悩んでいます
質問  いよかん  - 05/2/14(月) 13:06 -

引用なし
パスワード
   はじめまして、VBA初心者のいよかんと申します。
EXCEL2000を使用しているのですが、

Sub CommandButton1_Click

  Dim = i As Integer
  Dim = x As integer
  Dim = y As Intefer

  For i = 5 To 105
  x = Range("B" & i )
  y = Range("A" & i )

  If x = Empty Then
  Range("C" & i ).Value = ""
  ElseIf y = Empty then
  Range("C" & i ).Value = ""
  Else
  Range("C" & i) .Value = x - y
  End if
  Next

  end sub

というコードを書き、一応動作したのですが、
x の入力値が 0 もしくは y の入力値が 0 の場合に
値が出てこずセルが空の状態になるのと
x y ともに 0 だった場合も 0 と出ず、
そのままセルが空の状態になります。

※x y ともに 0 以外の数値であれば、きちんと値が出ます。

入力値が 0 であってもきちんと値が出るようにするには
どのようにすればよいのでしょうか?
アドバイスをお願いいたします。

【22270】Re:0の扱いで悩んでいます
回答  つん E-MAIL  - 05/2/14(月) 13:27 -

引用なし
パスワード
   はじめまして。

>  If x = Empty Then
>  Range("C" & i ).Value = ""
>  ElseIf y = Empty then
>  Range("C" & i ).Value = ""
>  Else
>  Range("C" & i) .Value = x - y
>  End if
>  Next

If x = Empty Then
で、「0」が入力されてても、通るからじゃないでしょうか?

A1に「0」を入力して

  If Range("a1").Value = Empty Then MsgBox "Emptyです"

で確かめてみてください。

あと、なんか、変数の宣言の所に「=」が入ってますけど、
いらないですよね???

【22271】Re:0の扱いで悩んでいます
質問  いよかん  - 05/2/14(月) 13:50 -

引用なし
パスワード
   つんさん、アドバイスありがとうございます。

宣言の「=」は質問を打っているときに、入れてしまったみたいで、
こちらの勘違いです。申し訳ありません。

>A1に「0」を入力して
>
>  If Range("a1").Value = Empty Then MsgBox "Emptyです"
>
>で確かめてみてください。
>
Emptyです、と出ます。
これは、私がEmptyの扱いを理解してないと言うことでしょうか?

X Y ともに値が入力されている場合のみ、
0やマイナス値も含めて、きちんと計算された値が表示され、
片方もしくは両方とも入力されてない場合、何も表示されないようにするには
どのように表記すればよいのでしょうか?
アドバイスいただけないでしょうか?

【22272】Re:0の扱いで悩んでいます
回答  つん E-MAIL  - 05/2/14(月) 13:55 -

引用なし
パスワード
   >Emptyです、と出ます。
>これは、私がEmptyの扱いを理解してないと言うことでしょうか?
私も、Emptyについて理解しているとは言い難いですが、
とにかく、「0」はEmptyになるようですね。


X Y ともに値が入力されている場合のみ、
>0やマイナス値も含めて、きちんと計算された値が表示され、
>片方もしくは両方とも入力されてない場合、何も表示されないようにするには
>どのように表記すればよいのでしょうか?
>アドバイスいただけないでしょうか?

何も入力されていない・・・を判定するには

If Range("A1").Value = "" Then

 あるいは、

If Range("a1").Value = vbNullString Then

でええんではないでしょうか?
あと、数値かどうかを判定するには、

IsNumeric 関数

なんかを使うといいと思います。

【22274】Re:0の扱いで悩んでいます
お礼  いよかん  - 05/2/14(月) 14:16 -

引用なし
パスワード
   つんさん、アドバイスをありがとうございました。
うまく動作いたしました。

まわりに詳しいものがいないもので、
本やネットで勉強しながらやってますけど、
素人なもので、どうしてもすぐ詰まってしまいます。

どこが悪いのか、なぜ悪いのかがわからず、
悩み続けておりましたが、
おかげさまですっきりいたしました。

本当にありがとうございました。

【22288】Re:0の扱いで悩んでいます
発言  sa  - 05/2/15(火) 9:40 -

引用なし
パスワード
   Empty 値は

値が代入される前の
バリアント型 (Variant) 変数には、Empty 値が格納されています。Empty 値は特殊な値であり、数値の 0、長さ 0 の文字列 ("")、Null 値のいずれとも異なります。変数に Empty 値が格納されているかどうかを調べるには、IsEmpty 関数を使います。

Empty 値は、数値演算を行う式では数値の 0 として扱われ、文字列の連結などを行う式であれば長さ 0 の文字列として扱われます

つまり、Empty 値は
    Integer型などの数値の時は,数値の 0
    String型の時は、文字列 ("")
                  と同じです

ヘルプそのままですが参考までに

【22291】Re:0の扱いで悩んでいます
お礼  いよかん  - 05/2/15(火) 11:18 -

引用なし
パスワード
   saさん
丁寧な解説をありがとうございました。

まだ勉強中で、何となくでしか理解できないのが
はがゆいところですが、
今後の参考にしたいと思います。

10364 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free