ここから本文です

マクロでナンバリングをしました、桁が6ケタ以上になると、オーバーフローになって...

har********さん

2016/8/516:24:08

マクロでナンバリングをしました、桁が6ケタ以上になると、オーバーフローになってしまいます。
どのようにすればいいか教えてください。

Sub NumberPrint()

Dim idx As Integer
Dim frmPage, toPage
Dim a

frmPage = Application.InputBox("連番を挿入して印刷します" & Chr(13) _
& "開始番号を入力してください", Type:=1)
toPage = Application.InputBox("終了番号を入力してください", Type:=1)

a = MsgBox("開始番号は" & frmPage & "、終了番号は" & toPage & "です。" & vbCrLf & _
"印刷しますか?", vbYesNo, "印刷確認")

If a = vbYes Then

If frmPage > 0 And toPage >= frmPage Then
For idx = frmPage To toPage
Range("O1").Value = idx
ActiveSheet.PrintOut
Next idx
Else
MsgBox "開始番号、終了番号が不適切です。印刷は行いません"
End If

End If

End Sub

閲覧数:
81
回答数:
3
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

m3_maki0さん

2016/8/516:52:56

> Dim idx As Integer
> Dim frmPage, toPage

を次のように。

Dim idx As Long
Dim frmPage As Long
Dim toPage As Long

質問した人からのコメント

2016/8/5 17:13:56

ありがとうございました。無事できました。

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

mas********さん

2016/8/517:00:25

Dim idx As Integer

Dim idx As Long

Integer型変数には32767までしか入れられません。
整数は基本的に長整数のLong型で定義することをおすすめします。

また、質問内容に直接関係はありませんが、他の変数の型が明記されていないのはなぜでしょうか。
明記しないとVariant型になり、データ型を勝手に判断されてしまい、エラーが起きやすいため、おすすめしません。
入れる値の型が決まっている場合はきちんと明記しましょう。
今回の場合は全てLong型でいいと思います。

それと、提示されたコードでは、数字以外を入力されたときやキャンセルされたときにエラーが起きます。
InputBoxを使う場合は、いったんString型変数に格納し、数字かどうか判断したあとにLong型変数に格納するのがいいと思います。

以下、コード例です。


Sub Sample()
Dim idx As Long
Dim frmPage As Long, toPage As Long
Dim buf As String
Dim a As Long

Label1:
buf = Application.InputBox("連番を挿入して印刷します" & Chr(13) _
& "開始番号を入力してください", Type:=1)
If buf = "False" Then Exit Sub
If Not IsNumeric(buf) Then
MsgBox "数値を入力してください。"
GoTo Label1
End If
frmPage = buf

Label2:
buf = Application.InputBox("終了番号を入力してください", Type:=1)
If buf = "False" Then Exit Sub
If Not IsNumeric(buf) Then
MsgBox "数値を入力してください。"
GoTo Label2
End If
toPage = buf

a = MsgBox("開始番号は" & frmPage & "、終了番号は" & toPage & "です。" & vbCrLf & _
"印刷しますか?", vbYesNo, "印刷確認")

If a = vbYes Then

If frmPage > 0 And toPage >= frmPage Then
For idx = frmPage To toPage
Range("O1").Value = idx
ActiveSheet.PrintOut
Next idx
Else
MsgBox "開始番号、終了番号が不適切です。印刷は行いません"
End If

End If

End Sub

hon********さん

2016/8/516:59:13

Dim idx As Integer



Dim idx As Long

以下ヘルプの記述

整数型 (Integer)
-32,768 ~ 32,767 の範囲の 2 バイトの整数として格納される、整数の変数を保持するデータ型。

長整数型 (Long)
4 バイトで、-2,147,483,648 ~ 2,147,483,647の範囲の整数を表すデータ型。

Dim frmPage, toPageは、Variant
ダイナミックに型が変るので、問題はないですね。

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる