[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『Win11上でマクロを動かすと「オーバーフローしました」と出る』(TAKA)
windows10 Excel2019で作成したファイルにスケッチした下記のプログラムが、windows11 Excel2021上で動作しない。
以下プログラム
__________________________________
名簿転記:
sw名簿行数 = [CSW名簿行数] Dim iシート As Long
For iシート = 3 To 9 Set sht = Worksheets(iシート) sht.Activate ActiveSheet.Unprotect Password:="Jun-Y" Range("B25").Select Selection.Resize(sw名簿行数, 1).Select Selection.ClearContents [CSW名簿].Copy Range("B25").Select Selection.Resize(sw名簿行数, 1).Select Selection.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False [C学籍番号].Copy Range("A25").Select Selection.Resize(sw名簿行数, 1).Select Selection.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False Next iシート
Worksheets("集計表").Activate
_________________________________
このマクロを動かすと「オーバーフローしました」と出てしまう。型はLong型で記述しているため3〜9の数字に対しては十分扱えるはずなので、原因がわかりません。
お手数ですが解る方ご教授ください。
よろしくお願いします。
< 使用 Excel:Microsoft365、使用 OS:Windows11 >
どの行でエラーになるんですか? (xyz) 2023/06/15(木) 20:40:40
Dim iシート As Long
です。
(TAKA) 2023/06/15(木) 20:42:30
そもそもコードのなかで型を宣言していない変数がいくつもあるのですが、何故ですか?
すべての変数をきちんと型をつけて宣言して、
Sub xxxx()
から
End Sub
までを全て示されると、皆さんからコメントが寄せられるかもしれません。
(xyz) 2023/06/15(木) 22:40:02
Dim sht As Worksheet
名簿転記:
sw名簿行数 = [CSW名簿行数] Dim iシート As Long
For iシート = 3 To 9 Set sht = Worksheets(iシート) sht.Activate ActiveSheet.Unprotect Password:="Jun-Y" Range("B25").Select Selection.Resize(sw名簿行数, 1).Select Selection.ClearContents [CSW名簿].Copy Range("B25").Select Selection.Resize(sw名簿行数, 1).Select Selection.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False [C学籍番号].Copy Range("A25").Select Selection.Resize(sw名簿行数, 1).Select Selection.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False Next iシート
Worksheets("集計表").Activate ActiveSheet.Protect Password:="Jun-Y", Contents:=True Worksheets("結果").Activate ActiveSheet.Protect Password:="Jun-Y", Contents:=True Worksheets(1).Activate
End Sub
__________________________________________
(TAKA) 2023/06/15(木) 22:59:11
変数はそれ以外に3つあるのですが、頻繁に使っているため、VBA全体のトップに型をつけています。
Dim sw学年 As Byte
Dim swクラス数 As Byte
Dim sw名簿行数 As Integer
以上です。
(TAKA) 2023/06/15(木) 23:02:06
オーバーフローの原因は私にはわかりません。 Excelブックを扱っているだけなので、基本的にOSの変更は影響ないはずです。 ステップ実行して、セル範囲から取り込んだものが何か異常値になっていないか確認してください。 また、ブックの内容を新しいブックに移して、様子を見てみたらどうでしょう。(ブックが物理的に壊れている懸念) (・ブック間の単純なコピーペイストより、いったんCSVなどを経由したほうがよいと思います。 ・コードもテキストエディターなどを経由させたほうがよいでしょう。)
質問とは直接関係ないですが、気が付いたことをメモしておきます。参考にしてください。 1.変数は必ず宣言して下さい。 http://officetanaka.net/excel/vba/beginner/06.htm を参照してください。 2.変数の型について Byteとかは理論上はメモリーを節約できるかもしれませんが、 潤沢に資源がある昨今の環境では余り推奨されません。 むしろ、オーバーフローしないだろうかなどと気を使うことが既にロスです。 整数はすべてLongという方針の人も多いですし、速度的にはそのほうが有効らしいです。
3.シートやセルを逐一Selectするのは余り好ましくないです。可読性も低いです。 例えば、こんな風に書いたほうが見やすくないですか。
Sub test() Dim sht As Worksheet Dim sw名簿行数 As Long Dim k As Long
sw名簿行数 = [CSW名簿行数] For k = 3 To 9 Set sht = Worksheets(k) With sht .Unprotect Password:="Jun-Y" .Range("B25").Resize(sw名簿行数, 1).ClearContents
[CSW名簿].Copy .Range("B25").Resize(sw名簿行数, 1).PasteSpecial Paste:=xlPasteValues
[C学籍番号].Copy .Range("A25").Resize(sw名簿行数, 1).PasteSpecial Paste:=xlPasteValues .Protect Password:="Jun-Y" 'これが必要では? End With Next k 'Worksheets("集計表").Activate End Sub 私からは以上です。他の回答を待ってください。 (xyz) 2023/06/16(金) 07:30:04
(・ブック間の単純なコピーペイストより、いったんCSVなどを経由したほうがよいと思います。
・コードもテキストエディターなどを経由させたほうがよいでしょう。)
私は素人なので、上記内容がどういうことなのかわかりません・・・
とりあえずご教授頂いた通り、整理して直したもので試してみます。
(TAKA) 2023/06/16(金) 23:48:46
それは、単純にコピーペイストすると、誤作動の原因そのものがコピーされてしまう可能性があります。 その回避方法の一つと思ったまでです。 (可能であれば、一から再作成するのがベストです。)
意図した操作は単純なコピーペイストや、セル範囲の消去や、 シートの保護設定・解除などですから、一般的操作と考えられます。 ですから、想定しえないバグを踏んでいるか、 もしくはブックが壊れかけている可能性があるのではと愚考します。 (何らかの説明いただいていないことが原因の可能性もあるかも。)
(xyz) 2023/06/17(土) 13:11:52
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.