オーバーフロー
投稿者 るしぇ  (社会人)
投稿日時
2008/12/20 00:43:38
d は Static じゃないから毎回 0 になると判断して c が正ならつねに d < c
が成り立ちます。
c は
c = a '現時間代入
で、システム時刻の分と秒の合計。つまり必ず正ですね。
'秒合わせ
が何を意味しているのか不明ですが、条件判断の必要はありません。
まあ、何も処理してないので何の影響もありませんが、邪魔なので全部削除
しましょう。
If d = -a Then
この条件は直前の
d = c - a
に代入して - a = c - a
c = 0 にした方が初回条件として分かり易いので修正。
Dim e As Integer
e = b / f
UserForm1.TextBox8 = Round(e, 1)
e が整数型なので Round する前に丸められています。
これも意味が無いので削除。
オーバーフローになる処理を逆に追っていくと
e = b / f ←ここでオーバーフロー
f は入力値なので置いておいて
b = b + d 'bは合計時間
d の積算になってて
d = c - a
ここで1つ前の処理の
c = a '現時間代入
と見比べると時間が正常に未来へ流れていれば
d は、つねに負で積算されていくから、いつかは必ずオーバーフロー
します。
どこまで負の数を積算していきたいのですか?
…その処理に特に意味があるとは思えませんが、とりあえず
ある程度大きくなったら 0 に戻せば良いのでは?
が成り立ちます。
c は
c = a '現時間代入
で、システム時刻の分と秒の合計。つまり必ず正ですね。
'秒合わせ
が何を意味しているのか不明ですが、条件判断の必要はありません。
まあ、何も処理してないので何の影響もありませんが、邪魔なので全部削除
しましょう。
If d = -a Then
この条件は直前の
d = c - a
に代入して - a = c - a
c = 0 にした方が初回条件として分かり易いので修正。
Dim e As Integer
e = b / f
UserForm1.TextBox8 = Round(e, 1)
e が整数型なので Round する前に丸められています。
これも意味が無いので削除。
オーバーフローになる処理を逆に追っていくと
e = b / f ←ここでオーバーフロー
f は入力値なので置いておいて
b = b + d 'bは合計時間
d の積算になってて
d = c - a
ここで1つ前の処理の
c = a '現時間代入
と見比べると時間が正常に未来へ流れていれば
d は、つねに負で積算されていくから、いつかは必ずオーバーフロー
します。
どこまで負の数を積算していきたいのですか?
…その処理に特に意味があるとは思えませんが、とりあえず
ある程度大きくなったら 0 に戻せば良いのでは?
投稿者 ヘルプ  (社会人)
投稿日時
2008/12/20 08:50:25
すいませんうち間違えてました。
Dim a As Integer '現時間
Static b As Integer '合計時間格納
Static c As Integer '前時間
Dim d As Integer
Dim e As Integer
Dim f As Integer
f = Val(UserForm1.TextBox1.Text) - 1
'現時間
If UserForm1.TextBox1.Text + 1 Then
a = (Minute(Time) * 60) + Second(Time)
End If
'秒合わせ
If d < c Then
Val (a) + 3600
End If
算出
If UserForm1.TextBox1.Text + 1 Then
d = a - c ←ここ間違えてました。
If d = -a Then
d = 0
End If
b = b + d 'bは合計時間
e = b / f ←ここでオーバーフロー
UserForm1.TextBox8 = Round(e, 1)
c = a '現時間代入
End If
親切にご回答ありがとうございます。
初心者なものでご迷惑おかけしております。
このプログラムだと0の除算がなんとかってエラーが出ました。
申し訳ないです。
どう改善すれば良いかご指導お願いします。
Dim a As Integer '現時間
Static b As Integer '合計時間格納
Static c As Integer '前時間
Dim d As Integer
Dim e As Integer
Dim f As Integer
f = Val(UserForm1.TextBox1.Text) - 1
'現時間
If UserForm1.TextBox1.Text + 1 Then
a = (Minute(Time) * 60) + Second(Time)
End If
'秒合わせ
If d < c Then
Val (a) + 3600
End If
算出
If UserForm1.TextBox1.Text + 1 Then
d = a - c ←ここ間違えてました。
If d = -a Then
d = 0
End If
b = b + d 'bは合計時間
e = b / f ←ここでオーバーフロー
UserForm1.TextBox8 = Round(e, 1)
c = a '現時間代入
End If
親切にご回答ありがとうございます。
初心者なものでご迷惑おかけしております。
このプログラムだと0の除算がなんとかってエラーが出ました。
申し訳ないです。
どう改善すれば良いかご指導お願いします。
投稿者 るしぇ  (社会人)
投稿日時
2008/12/20 16:35:16
「0で割る計算は不定でも不能でもない,定義できない」
数学の話になるので、詳しく知りたい場合は数学のサイトを検索してみてください。
高校の数学かな?「0では割り算できません」と習うのは。。。
1÷0の答えは?一般的には出せないのでプログラムでも計算できません。
分母が0のときは割り算しないようにしてください。
数学の話になるので、詳しく知りたい場合は数学のサイトを検索してみてください。
高校の数学かな?「0では割り算できません」と習うのは。。。
1÷0の答えは?一般的には出せないのでプログラムでも計算できません。
分母が0のときは割り算しないようにしてください。
投稿者 るしぇ  (社会人)
投稿日時
2008/12/20 23:04:58
> d = a - c ←ここ間違えてました。
> If d = -a Then
修正前と同じように連立方程式を解いて
-a = a - c
c = 2a
前回の処理時間が現時間の2倍の時のみ成り立つ。。。
・・・何がどう間違いでどう改善されたのか分かりません。
d = 0 の処理が実行されたところで積算され続ける b が改善される
わけでもなく。。。
オーバーフローも相変わらずですね。
> If d = -a Then
修正前と同じように連立方程式を解いて
-a = a - c
c = 2a
前回の処理時間が現時間の2倍の時のみ成り立つ。。。
・・・何がどう間違いでどう改善されたのか分かりません。
d = 0 の処理が実行されたところで積算され続ける b が改善される
わけでもなく。。。
オーバーフローも相変わらずですね。
投稿者 cupid  (社会人)
投稿日時
2008/12/21 22:06:49
要所〃〃でDebug.Printを入れなさい。でないと、上達はおぼつかない。
自分としては、Debug.Printより、Form上のLabelに書き出す方が好きですが、
それでもDebug.Printの方が楽なのは確かです。
自分としては、Debug.Printより、Form上のLabelに書き出す方が好きですが、
それでもDebug.Printの方が楽なのは確かです。
Static b As Integer '合計時間格納
Static c As Integer '前時間
Dim d As Integer
Dim e As Integer
Dim f As Integer
f = Val(UserForm1.TextBox1.Text) - 1
'現時間
If UserForm1.TextBox1.Text + 1 Then
a = (Minute(Time) * 60) + Second(Time)
End If
'秒合わせ
If d < c Then
Val (a) + 3600
End If
算出
If UserForm1.TextBox1.Text + 1 Then
d = c - a
If d = -a Then
d = 0
End If
b = b + d 'bは合計時間
e = b / f ←ここでオーバーフロー
UserForm1.TextBox8 = Round(e, 1)
c = a '現時間代入
End If
オーバーフローしてしまいます。
どうすればよいでしょう。
時間の差をだしたい。