過去ログ

                                Page     316
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼オーバーフローしてしまいます  平 02/11/8(金) 13:40
   ┗Re:オーバーフローしてしまいます  yu-ji 02/11/8(金) 13:51
      ┗Re:オーバーフローしてしまいます  平 02/11/8(金) 14:13
         ┗それゎね  ねこ@自宅 02/11/9(土) 22:56

 ───────────────────────────────────────
 ■題名 : オーバーフローしてしまいます
 ■名前 : 平
 ■日付 : 02/11/8(金) 13:40
 -------------------------------------------------------------------------
   ACCESSでは度々お世話になっています平です。
EXCELのVBAは初挑戦なのでよろしくお願い致します。
(バージョンはEXCEL2000です)

現在、ある表の更新用のプログラムを作成しております。
マクロを記録させたものをベースに改良したのですが
下記プログラムを実行させると途中で
”オーバーフローしました”とエラーが出てしまいます。
この原因がどこにあるか教えて頂けないでしょうか?

ちなみに問題の個所は、複数のセルの値の合計を特定の
セルに書き込む計算をさせている部分です。
(値は最大で7桁になります)


Sub 変換()

Dim WS As Variant
Dim I, J, T As Integer
Dim FI, DG, NO, HI, PQ, DI, NQ, P, II, OO, O, Q As String

For Each WS In Worksheets
Worksheets(WS.Name).Activate
With ActiveSheet
 
 For I = 4 To 34 Step 15

'-----------日付更新---------------

'---------------情報書換-------------------

'-------------旧データ消去---------------------

'-------------予定数の更新--------------------

  FI = "F" & (I + 5) & ":I" & (I + 6)
  DG = "D" & (I + 5) & ":G" & (I + 6)
  NO = "N" & (I + 5) & ":O" & (I + 6)
  HI = "H" & (I + 5) & ":I" & (I + 6)
  PQ = "P" & (I + 5) & ":Q" & (I + 6)
  OO = "O" & (I + 5)
  II = "I" & (I + 5)
  Range(FI).Select
  Selection.Copy
  Range(DG).Select
  ActiveSheet.Paste

  T = Range(OO).Value  ←デバッグモードで入るとここに印があります
  For J = 12 To 14
   O = "O" & J
   Q = "Q" & J
   T = T + Range(O).Value + Range(Q).Value
  Next J
  Range(II).Value = T
 
  Range(PQ).Select
  Selection.Copy
  Range(NO).Select
  ActiveSheet.Paste
  Range(PQ).Select
  Application.CutCopyMode = False
  Selection.Copy
  Range(NO).Select
  ActiveSheet.Paste
  
'---------------追加・取消----------------------

'---------------ここまで------------------------------
 Next I
 
Range("A1").Select
End With
Next WS

End Sub
 ───────────────────────────────────────  ■題名 : Re:オーバーフローしてしまいます  ■名前 : yu-ji  ■日付 : 02/11/8(金) 13:51  -------------------------------------------------------------------------
   こんにちは。

▼平 さん:
>下記プログラムを実行させると途中で
>”オーバーフローしました”とエラーが出てしまいます。

>ちなみに問題の個所は、複数のセルの値の合計を特定の
>セルに書き込む計算をさせている部分です。
>(値は最大で7桁になります)

>Dim WS As Variant
>Dim I, J, T As Integer
>Dim FI, DG, NO, HI, PQ, DI, NQ, P, II, OO, O, Q As String

値が最大7桁になるのであれば、Int型ではオーバーフローしますよ。
ヘルプに載ってますが、Int型で扱えるのは、、-32,768 〜 32,767
です。
なので、7桁になるのであれば、Long型を使用してください。

またVBAは、上記のような型宣言では、ちゃんと宣言されません。
それぞれの変数について、「As 型タイプ」としないと、宣言されていないと
判断されVariant型とされてしまいます。
#Dim I As Long,J As Long・・・といった感じ
 ───────────────────────────────────────  ■題名 : Re:オーバーフローしてしまいます  ■名前 : 平  ■日付 : 02/11/8(金) 14:13  -------------------------------------------------------------------------
   yu-jiさん、こんにちは。
ACCESSに引き続き、こちらでもお世話になります。

>値が最大7桁になるのであれば、Int型ではオーバーフローしますよ。
>ヘルプに載ってますが、Int型で扱えるのは、、-32,768 〜 32,767
>です。
>なので、7桁になるのであれば、Long型を使用してください。
書き込んだ後に、宣言した型では扱えないのでは?と気付きました(汗)
お手数、お掛けして申し訳ありませんでした。

>>Dim WS As Variant
>>Dim I, J, T As Integer
>>Dim FI, DG, NO, HI, PQ, DI, NQ, P, II, OO, O, Q As String
>またVBAは、上記のような型宣言では、ちゃんと宣言されません。
>それぞれの変数について、「As 型タイプ」としないと、宣言されていないと
>判断されVariant型とされてしまいます。
>#Dim I As Long,J As Long・・・といった感じ
これは知りませんでした、と言うか前に何かの本で見た時に
同じ型の宣言をする場合はこういう書き方もできます、と言った
内容のを見たからです。ただ、もしかすると意味を勘違いして
いるかも知れませんが、今まで支障がなかったのでわかりませんでした。
どうも、ありがとうございました。
 ───────────────────────────────────────  ■題名 : それゎね  ■名前 : ねこ@自宅  ■日付 : 02/11/9(土) 22:56  -------------------------------------------------------------------------
   こんばんわ

>>#Dim I As Long,J As Long・・・といった感じ
>これは知りませんでした、と言うか前に何かの本で見た時に
>同じ型の宣言をする場合はこういう書き方もできます、と言った
>内容のを見たからです。ただ、もしかすると意味を勘違いして
 これはVB.NETの記事でも読まれたんじゃないんかな?

じゃねじゃね

一言で去る(w
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 316