いつもありがとうございます。
先日までは普通に動いていたんですが、他のBOOKからマクロを動かしたらオーバーフローとなってしまいました。
更に単体で動かしてもオーバーフローとのエラーが出てしまいます。
VBA
1Sub SQL抽出() 2 3Dim firstday As String 4Dim lastday As String 5Dim jan As Variant 6Dim path As String 7Dim wbpi As Workbook 8Dim wb As Workbook 9Dim re As String 10Dim r As Long 11Dim s As Long 12Dim i As Long 13 14 15Set wbpi = ThisWorkbook 16firstday = wbpi.Worksheets("グラフ").Range("B2") 17lastday = wbpi.Worksheets("グラフ").Range("D2") 18jan = wbpi.Worksheets("グラフ").Range("B3")
最終行でjanに値を入れるとオーバーフローになります。
当初、String型にしていたのですが、それでオーバーフローになってしまったので
Variant型に変更したんですが、それでもオーバーフローになります。
変数Janの名の通りに、Janコードが入ります。
1つの場合もありますが、複数の場合には、4902705116542,4901730077583のようにカンマ区切りの値が入ります。
末に.valueをつけてもダメです。
変数宣言しないでやったらどうなりますか?(Option Explicit宣言してたらコメントアウトしてください)ステップ実行して変数janの型が何になるか見てみてください。
エラーメッセージを書いてください。
ttyp03さん
変数宣言しないというのはどういうことでしょうか?
型を指定しないということでよい?それでもオーバーフローしてしまうので
janに値が入らずTypeNameまで行ってくれないです。
janはEmptyのままです。
otnさん
エラーメッセージは
実行時エラー6でオーバーフローしました。です。
Dim janの行をコメントアウトするということです。
VBAは宣言しなくても自動で最適な型で動作する仕組みがあります。
やりました。
どうやら、janが1つしかないときにオーバーフローするようです。
カンマがついているときにはStringで読み込んでます。
cLngやcStrで突っ込んでもオーバーフローになります。
こちらで試してみたけど、何をやってもエラーにならないんですよね。
少なくとも複数個入る可能性があるなら、Stringを使うのは正しいと思います。
他のBookでも同じような処理やってるんですが、そっちはオーバーフローにもならず、ちゃんtStringで入ってるんですよね。。。
なんで急にオーバーフローになってしまったのか。。。謎なんです。。。
なんか解決策ってありますでしょうか?
原因がわかりました!
セルの書式が日付になってました。
これを標準にすることで問題なく値を受け取れました!
今までできてたってことはだれかいじったのかな?
あまりお役に立てなかったですけど、原因わかってよかったです。
いえ、こちらこそいつもありがとうございます。
また、よろしくお願いします。
Janコードが1つの時、セルのプロパティを文字列にすればどうでしょうか?「4902705116542」って4バイト符号付き整数を超えちゃうので、VBAではDouble型か文字列で持つしかないように思います。
PineMatsuさん
janを読み込む前に書式を変更にしました。
wbpi.Worksheets("グラフ").Range("B3").NumberFormatLocal = "@"
これをいれたところ、思い通りに動いてくれました。
ありがとうございます。

回答2件
あなたの回答
tips
プレビュー