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 |
こんにちは。 ▼平 さん: >下記プログラムを実行させると途中で >”オーバーフローしました”とエラーが出てしまいます。 >ちなみに問題の個所は、複数のセルの値の合計を特定の >セルに書き込む計算をさせている部分です。 >(値は最大で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・・・といった感じ |
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・・・といった感じ これは知りませんでした、と言うか前に何かの本で見た時に 同じ型の宣言をする場合はこういう書き方もできます、と言った 内容のを見たからです。ただ、もしかすると意味を勘違いして いるかも知れませんが、今まで支障がなかったのでわかりませんでした。 どうも、ありがとうございました。 |
こんばんわ >>#Dim I As Long,J As Long・・・といった感じ >これは知りませんでした、と言うか前に何かの本で見た時に >同じ型の宣言をする場合はこういう書き方もできます、と言った >内容のを見たからです。ただ、もしかすると意味を勘違いして これはVB.NETの記事でも読まれたんじゃないんかな? じゃねじゃね 一言で去る(w |