No.7ベストアンサー
- 回答日時:
>a=0 or 6が実は定数-1になってしまいます。
>というのはどうしてなのでしょうか
a = 0 or 6 と普通にaに代入すると
これはビット演算ですから a に6が入ります。
しかし、if文の中では a=0 と 6 の論理演算になります。
演算子の優先順序など、詳しいことは#6の方の説明の中にあります。
そして (( a = 0 ) or 6 ) の評価が-1(True)となります。
上記でも分かると思いますが、6が単独で残ってしまうのが問題で、
必ずTrueになってしまいます。
No.6
- 回答日時:
> 0 or 6 では単純な計算式ですから 6 となります。
Or演算子は論理和ではなくbit和で計算されます。
00000000と00000110のbit和で00000110
一方、=演算子はbool値を帰します。
また、演算子には優先順位があって、= の方が Or より強い。
> If a = 0 Or 6 Then
は
((a = 0) Or 6)
が評価され
aが0の場合は
(a=0)の値はTrue
2進で書くと
1111111111111111 Or 0000000000000110
でbit和は
1111111111111111
つまり
if True then
aが0以外は
(a=0)の値はFalse
2進で書くと
0000000000000000 Or 0000000000000110
でbit和は
0000000000000110
つまり
if 6 then
if文は0以外はthen節を実行される。
No.5
- 回答日時:
かなり派手に間違っていますね^^;
正しい書き方は#1の方の通りですが、
0 or 6 では単純な計算式ですから 6 となります。
すると 上記のコードは if a = 6 then と同じことになり・・・
ちょっとおかしいですよね。
a = 6と同じなら a が6のときしかifの中に入らないはず!?
実は上記の使い方は二重に論理ミスを犯していまして、
かなりおかしなことになっています。
a = 0 or 6 が実は定数 -1 になってしまっています。
で上記のコードは if -1 then と同じになっています。
この回答への補足
回答ありがとうございます。
かなり派手に間違ってしまいました。
ところで、
>a=0 or 6が実は定数-1になってしまいます。
というのはどうしてなのでしょうか?もうちょっと教えてもらえないでしょうか?
No.4
- 回答日時:
> If a = 0 Or 6 Then
の6というのは、常に6なのでそのif条件には必ず合格(?)します。
正しくは、
If a = 0 Or a = 6 Then
私なら
If (a = 0) Or (a = 6) Then
としますね。
a = (0 Or 6)
というのも無理なんじゃないかなあ。
まあ、VB6にもデバッガがあるので、ifステートメントの条件式の値をウォッチするとよいでしょう。
プリントさせるなら、aだけでなく、条件式の中身も画面上に出すと分かります。
ありがとうございます。
納得できました。
0 or 6が6になるというのは、
00000000
00000110
をorすると6になるからTrueになる、ということであってるでしょうか?
No.2
- 回答日時:
正解は#1の方の書き方で良いと思います。
要は以下のように書いた時、
If [評価式A] Or [評価式B] Then
処理X
ELSE
処理Y
END IF
評価式Aが真 または 評価式Bが真 の時に処理Xが行われます。
質問者さんのような書き方をしてしまうと
a=0が偽と判定されてもBの評価式が「6」としか書いてないので常に真となってしまいます。
※真偽の判断は内部的には 偽が0、真はそれ以外 というようになってます。
その為、0以外の数値などは真と判定されます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) VBAで “:” を含むセルの特定 2 2023/05/11 16:30
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) Excel VBA ユーザーフォーム 複数のユーザーフォームの閉じ方。 2 2022/04/27 11:29
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/03 09:11
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
VB6.0 のformat関数について
Visual Basic(VBA)
-
VBの画面サイズについて
Visual Basic(VBA)
-
VB6.0の「vbFromUnicode」はVB.NETではどれに相当しますか?
Visual Basic(VBA)
-
-
4
VB6とVB.NETでNullの扱いが違う?
Visual Basic(VBA)
-
5
上下の位置揃えについて
Visual Basic(VBA)
-
6
VB6でのファイル作成方法
Visual Basic(VBA)
-
7
TO_CHARでのゼロ非表示について
Oracle
-
8
任意のフォームが表示されているかを知りたい
Visual Basic(VBA)
-
9
Visual Basic 6.0 のテキストボックスの最大容量について
Visual Basic(VBA)
-
10
VB6で開発中…標準モジュール間での関数の呼び出し方は?
Visual Basic(VBA)
-
11
コモンダイアログコントロールがコンポーネントにありません
Visual Basic(VBA)
-
12
なぜオーバーフローになるのでしょうか。
Visual Basic(VBA)
-
13
コンパイルエラー:ユーザ定義型は定義されていません、と出るのですがどのライブラリファイルかわかりません。
Visual Basic(VBA)
-
14
VB6.0-整数と余りを求める
Visual Basic(VBA)
-
15
他のモジュールのプロシージャの呼び出したい。
Visual Basic(VBA)
-
16
Visual Basic 6.0 コンボボックスのChangeイベントが発生しません
Visual Basic(VBA)
-
17
VB6のプロジェクトロードエラーについて
Visual Basic(VBA)
-
18
VB6.0を使用しています
Visual Basic(VBA)
-
19
VB6でCSVの取込をする
Visual Basic(VBA)
-
20
VB6のメモリ解放に関して
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ArrayListの要素数の上限
-
Stringクラスの変数の格納アド...
-
ダブルクォーテーションを含む...
-
DateTimePickerに値を入れたい...
-
matchesを否定文として使う方法...
-
PSQLExceptionが発生する
-
暗号化文字列を英数字のみにしたい
-
hiddenの値を消したくない!
-
このプログラミング誰か教えて...
-
BCD形式で時刻を!
-
wsprintf関数の使い方について
-
特定の文字列を複数抜き出した...
-
Javaの問題なのですが、「3文字...
-
このプログラミング誰か教えて...
-
char型での演算子
-
excel vba 時間計算と条件分岐...
-
DOSバッチで変数の値を変数名に...
-
VB.NET+Javascriptで、VB.NETで...
-
Evaluate()に文字列の形式の数...
-
【struts】<logic:iterate>で出...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダブルクォーテーションを含む...
-
ArrayListの要素数の上限
-
特定の文字列を複数抜き出した...
-
javaのCSVデータ読込についてです
-
wsprintf関数の使い方について
-
BCD形式で時刻を!
-
結合した文字列をファイル名に...
-
Evaluate()に文字列の形式の数...
-
C言語の変数(LSB)の合わせ込...
-
実行シェルからCOBOLへパラメー...
-
hiddenの値を消したくない!
-
VB6,論理演算子Orの使い方がわ...
-
DateTimePickerに値を入れたい...
-
char型での演算子
-
String str = "a\\\\b\\\\c";
-
Javaの問題なのですが、「3文字...
-
8桁整数を限りなく短い文字列に...
-
matchesを否定文として使う方法...
-
DOSバッチで変数の値を変数名に...
-
excel vba 時間計算と条件分岐...
おすすめ情報