No.2ベストアンサー
- 回答日時:
例えばFor文の次にDebug.Print tとか書いて実行させてもイミディエイトウィンドウには何も表示されません。
ループには入っていないのです。またエラーで止まった状態でtの値を見ると直前の値(セットしていなければ0)のままです。要するにtは関係ないんです。では何がオーバーフローしているのかと言えば、Step -1の-1です。これはあくまでも推測ですが、ループ変数(t)がByte型なのでStep値をByte型で扱おうとしてエラーになっているのでしょう。
通常の演算(代入文とか)では、自動的に型変換が行なわれるので、Byte型であっても例えばt-1.5なんて演算もできてしまいます(イミディエイトウィンドウで試してみて下さい)。もちろんこれをt=t-1.5のようにByte型に代入しようとすれば、型変換により小数部は丸められ(精度落ち)、さらに整数部がByteの範囲外であればエラーになります。
ループでこのような型変換を毎回行なっていては当然実行速度が遅くなってしまいます。なのでStep値をあらかじめループ変数の型に合わせておき、演算を高速化しようとしているのでしょう。で、-1をByte型にしようとしてエラーを起こしていると。
ま、あくまでも推測ですので念のため(^^;
回答ありがとうございました。
確かに Step値を t と同じ型で扱っていると考えると納得がいきますね。ここまでは何となく考えられたのですが、演算の高速化をはかるため、とまでは考えませんでした。
推測とはおっしゃっていますが、私はこれが正しいと思います。
No.3
- 回答日時:
Byte宣言しなくてはならないのですか?
Integer宣言でも良いのなら、Integer宣言すれば良い。
Byte宣言しなくてはならないなら、ループ部をIntegerにして、CByte関数で型変換する。
回答ありがとうございました。
別にByte宣言する必要はないです。ただ t に負の数も、少数も使うことがなかったのでなるべく小さい物を使おうとしたからです。しかし必要性はありませんが、ステートメント中で t が負になる事がないのにオーバーフローしてしまうことに疑問を持ちました。t=10, 9, 8, ... ,1ではないのでしょうか。
No.1
- 回答日時:
前段だって254まではOkで、255ではエラーです。
Sub test01()
Dim t As Byte
For t = 1 To 255 Step 1
Next t
End Subはエラーとなる。ご存知でしたか。
1バイト8ビット、0から255までの2進数として「無理に」(数に変換して)解釈して実行してくれているのではないでしょうか。
Forの後のtはカウンタ変数と言ったと思いますが、カウンターにバイト型をなぜ当てはめるのでしょうか。原理的な勉強は私もしたいが、Integerで何ら困らないと思うのですが。素人に計り知れない深い理由でもあるのかな。
回答ありがとうございました。
別にByte宣言する必要はないです。ただ t に負の数も、少数も使うことがなかったのでなるべく小さい物を使おうとしたからです。しかし必要性はありませんが、ステートメント中で t が負になる事がないのにオーバーフローしてしまうことに疑問を持ちました。t=10, 9, 8, ... ,1ではないのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAがブレークモードになっ...
-
実行時エラー 438になった時の...
-
VBAでのエラー
-
なぜこんな初歩的なVBAのIf文で...
-
エクセルエラー13型が一致しま...
-
VBS実行時エラー オブジェクト...
-
Invalid procedure call or arg...
-
ExcelVBA Range クラスの Page...
-
エクセルVBA autofilterでエラー
-
EXCEL/VBAで、自分のPCだけエラ...
-
実行時エラー48発生時のDLL特定...
-
【エクセル】ハイパーリンク先...
-
Access:結果は出るがエラー
-
VB6+SQL サーバー 2000 で 実行...
-
アクセス 実行時エラー3265
-
ExcelVBAで、ユーザー定義型は...
-
VBで構造体を使うさ際の64k...
-
EXCEL VBAマクロ中断でデバッグ...
-
実行時エラー3001「引数が間違...
-
VBSで変数の宣言はできないので...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー 438になった時の...
-
エクセルエラー13型が一致しま...
-
VBAがブレークモードになっ...
-
なぜこんな初歩的なVBAのIf文で...
-
【Excel VBA】マクロをボタンに...
-
VBSで変数の宣言はできないので...
-
VBS実行時エラー オブジェクト...
-
実行時エラー3001「引数が間違...
-
ExcelVBA Range クラスの Page...
-
ExcelVBAで、ユーザー定義型は...
-
EXCEL VBAマクロ中断でデバッグ...
-
マクロについて教えてください...
-
プロシージャ名の取得
-
ADODB.Streamを使用してUTF-8を...
-
実行時エラー -'-2147417848
-
Outlook.ApplicationをCreateOb...
-
VBAでのエラー
-
なぜエラーになるのでしょうか...
-
VBAのコードがエラーになっ...
-
[Delphi] データセットは閉じて...
おすすめ情報