過去ログ

                                Page     135
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼i=10000になる前にエラーで止まってしまうのですが  カド 02/9/26(木) 19:10
   ┗Re:i=10000になる前にエラーで止まってしまうのですが  KTB 02/9/26(木) 19:15
      ┗Re:i=10000になる前にエラーで止まってしまうのですが  カド 02/9/26(木) 19:17
         ┗Re:i=10000になる前にエラーで止まってしまうのですが  よろずや 02/9/27(金) 0:01
            ┗Re:i=10000になる前にエラーで止まってしまうのですが  カド 02/9/27(金) 12:40

 ───────────────────────────────────────
 ■題名 : i=10000になる前にエラーで止まってしまうのですが
 ■名前 : カド
 ■日付 : 02/9/26(木) 19:10
 -------------------------------------------------------------------------
   教えてください。
i=10000になる前にエラーで止まってしまうのですが、
どうしてですか?

Sub nn()

Dim i As Integer
Dim intPercent As Long

 For i = 1 To 10000 'ループ回数

  intPercent = Int(i * 100 / 10000)←エラーで止まる
  
  Range("a1") = i
 
 Next i
 
 
End Sub
 ───────────────────────────────────────  ■題名 : Re:i=10000になる前にエラーで止まってしまうのですが  ■名前 : KTB  ■日付 : 02/9/26(木) 19:15  -------------------------------------------------------------------------
   カドさん

>  intPercent = Int(i * 100 / 10000)←エラーで止まる

 intPercent = Int(i * 100& / 10000)

試してみてね。
 ───────────────────────────────────────  ■題名 : Re:i=10000になる前にエラーで止まってしまうのですが  ■名前 : カド  ■日付 : 02/9/26(木) 19:17  -------------------------------------------------------------------------
   ▼KTB さん:

ありがとうございます。

ものすごく早いレスポンスですね〜

すみません、理由と解説もお願いできませんか?
 ───────────────────────────────────────  ■題名 : Re:i=10000になる前にエラーで止まってしまうのですが  ■名前 : よろずや  ■日付 : 02/9/27(金) 0:01  -------------------------------------------------------------------------
   >すみません、理由と解説もお願いできませんか?
i * 100 の計算ですが、 i も 100 も Integer ですね。
Integer型同士の計算では、計算結果もInteger型になります。
で、実際に計算してみると、Integer型の最大値である32767を超えてしまいますよね。
で、オーバーフローというエラーになります。

どちらかをLong型にすれば、計算結果もLong型になります。
・・・Long型の最大値は、2,147,483,647 です。
で、手っ取り早いのは、100をLong型にする方法です。
&を付けると、Long型になります。

他には、
Dim i As Long と定義する方法。
CLng(i) * 100 としてLong型に変換する方法。
i * CLng(100) とする方法。
しかし、
CLng(i * 100) ではダメです。
オーバーフローしちゃってから変換しても手遅れ。
 ───────────────────────────────────────  ■題名 : Re:i=10000になる前にエラーで止まってしまうのですが  ■名前 : カド  ■日付 : 02/9/27(金) 12:40  -------------------------------------------------------------------------
   ▼よろずや さん:
>i * 100 の計算ですが、 i も 100 も Integer ですね。
>Integer型同士の計算では、計算結果もInteger型になります。
>で、実際に計算してみると、Integer型の最大値である32767を超えてしまいますよね。
>で、オーバーフローというエラーになります。

回答ありがとうございます。

これまで、それなりにプログラムを作ってきましたが、今まで一度もこんな場面に出会ったことがなく、iはともかく、i * 100 が32767を超えてはいけないとはまったく知りませんでした。

これからもよろしくおねがいします〜
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 135