• ベストアンサー

vbaでのerror"オーバーフロー"

・ ・ ・ dim x as variant x = (50 * 50 * 50) + (0.2 * 0.2 * 3.14 * 2000 * 2) + 10 ・ ・ ・ としたところ、x=…の箇所で  error"オーバーフローしました"が生じます。 なぜエラーが生じるのかがわかりません。 また、解決策がありましたら教えていただけないでしょうか? よろしくお願いいたします。

  • romu-
  • お礼率85% (18/21)

質問者が選んだベストアンサー

  • ベストアンサー
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

dim x as variant x = (50# * 50# * 50#) + (0.2 * 0.2 * 3.14 * 2000 * 2) + 10# としましょう。 型宣言文字 # は、倍精度浮動小数点数型 (Double)です。 variantだと数値の場合、式を評価して勝手に 精度が調整されます。つまり50*50*50だと整数データばかりなので、 xも整数(INT)と認識されます。

romu-
質問者

お礼

ご回答ありがとうございました。 Variantは万能だと思いこんでいましたが、 実はVariantも難しいものなんですね。 例文まで載せて戴きありがとうございました。

関連するQ&A

  • vbaでオーバーフローしてしまいました。

    Dim i As Long Dim k As Long For i = 1 To 829 For k = 1 To 995 Worksheets("2").Cells(k,i) = Worksheets("1").Cells(k,i) /Worksheets("1").Cells(996,i) Next k Next i これを実行したらオーバーフローしてしまい、途中までしか計算できませんでした。 解決方法を教えて頂きたいです。よろしくお願いします。

  • 単純【エクセルVBA】なぜオーバーフローになる?

    環境 Excel2003 Win7 64bit -------------- Const C as Currency = 50000000 Sub Test()   Dim A as Currency   Dim B as Currency   B = 6823695200   A = B \ C '←ここでオーバーフロー End Sub --------------- 「A = B \ C」 ↑この式はオーバーフロー時、ウォッチ式上では、 型: Integer と表示されますが、これも不思議。 また、「A = B \ C」を、 A = CCur(B) \ CCur(C) としても、オーバーフロー。 それと、 「Const C as Currency = 50000000」を、 「Const C = 50000000」 としても、同様にオーバーフロー。 Currency型は、 -922,337,203,685,477.5808~922,337,203,685,477.5807 のはず。 このオーバーフローは、一体なぜ?

  • VBAでの演算。オーバーフローしてしまいます

    VBAで現在プログラミングを勉強しています。 除数を利用し数値を割り出したいのですが、どうしてもオーバーフローしてしまいます。 Variant型にすればいいのかなと思い、全てVariant型で最入力したのですが、 上手く動きません。 整数と整数を割り算し、小数の答えが出ます。 それを小数点第2位まで丸めることをしたいと思っています。 どなたが助けていただけませんか、よろしくお願い致します。 以下、入力値です。 Dim ColumnB As Double, ColumnF As Long, ColumnI As Long ColumnB = ColumnI / ColumnF ColumnB = Application.WorksheetFunction.RoundDown(ColumnB, 2) With ThisWorkbook.Worksheets("COVER") .Range("B" & curRow) = ColumnB .Range("F" & curRow) = ColumnF .Range("I" & curRow) = ColumnI End With よろしくお願い致します。

  • オーバーフローします

    sub X() dim a a=1000*33 end sub たったこれだけですが「オーバーフロー」というエラーになります。なぜでしょうか vb5、access97のVBAでも同じです。

  • VBAでLong型同士の乗算について

    すいません。タイトルの件で Long型同士での乗算なのですが... 以下のマクロがどうしてもオーバーフローになってしまいます。 (SLはLong、Double、Variantにしてみましたが全てオーバーフロー・・) すいませんが御教授お願いします。 (普段からあまりデータ型をあまり意識してないのがバレバレですね(>_<) Option Explicit Sub Macro1() Dim AL As Long Dim BL As Long Dim SL As Variant AL = 65535 BL = 65535 Cells(1, 1) = AL Cells(1, 2) = BL SL = CVar(AL * BL) Cells(1, 3) = SL End Sub

  • オーバーフロー比分母変換 aftereffects エラー

    aftereffectsにとある動画をとりこむと、 AEエラー:オーバーフロー比分母変換と出ます。 なんのことなのか、解決策を調べ中なのですが… わかる方がいたらと思い、質問させていただきます。 よろしくお願いします!

  • VBA アプリケーション定義エラーについて

    初めて質問させていただきます。 Excelファイルを読み込む処理をAcsess2000を使用して作成しております。 下記、プログラムを実行すると「↓エラー発生個所」箇所にて、 「アプリケーション定義またはオブジェクト定義エラー」が発生します。 Acsessについて、まだ知識不足なため困っております。 どなたか、原因または改善方法について教えていただけないでしょうか? 宜しくお願い致します。 Public Function RoadExcelData(ByVal P_strSheetName As String, ByRef P_valDataArea As Variant) Dim objExl2 As Object Dim strSheetName As String Dim strReadStart As String Dim valDataArea As Variant On Error GoTo Err_Handle 'シート名称取得する strSheetName = m_rsCarrirData.Fields("SHEET_NAME_" & P_strSheetName) '読み込み開始位置を取得する strReadStart = m_rsCarrirData.Fields("READ_START_" & P_strSheetName)   '↓エラー発生個所 Set objExl2 = GetObject(m_rsCarrirData.Fields("FILENAME_PATH") & "\" & m_rsCarrirData.Fields("FILE_NAME_" & P_strSheetName)) objExl2.Worksheets(strSheetName).Activate 'Excelデータを読み込む With objExl2.Worksheets(strSheetName) P_valDataArea = .Range(strReadStart, .Range("A1").SpecialCells(11)).Value End With Exit Function Err_Handle: MsgBox Err.Description End Function

  • 2013VBでオーバーフローエラー(2)

    よろしくお願いします。 前回の質問ではエラーの出た部分しか表示していなかった為、回答して頂いた方に 十分な情報が提供できずすみませんでした。 下記がエラーの出た部分までの全プログラムです。 Dim book1 As String 'ブック名1 Dim book2 As String 'ブック名2 Dim book3 As String 'ブック名3 Dim book4 As String 'ブック名4 Dim myday As Date Dim ITI1 As String 'アドレスの格納 Dim ITI2 As String 'アドレスの格納 Dim ITI3 As String 'アドレスの格納 Dim ITI4 As String 'アドレスの格納 Dim ITI5 As String Dim ITI6 As String Dim ITI7 As String Dim ITI8 As String Dim myRange As Range 'コードの個数 Dim myRange1 As Range Dim answer As Integer Dim bunki1 As Integer Dim c As Double 'カウント Dim n As Double 'カウント 'ワークブックの設定 Workbooks("A.xls").Activate book1 = Worksheets("ブックシート設定").Range("c3") 'コピー元 'book2 = Worksheets("ブックシート設定").Range("c5") book3 = Worksheets("ブックシート設定").Range("c7") 'A 'book4 = Worksheets("ブックシート設定").Range("c9") bunki1 = Worksheets("ブックシート設定").Range("c16") myday = Worksheets("ブックシート設定").Range("c14") 'コピー元非表示を表示にする Workbooks(book1).Activate Sheets("B").Select Sheets("B").Select Columns("G:J").Select Selection.EntireColumn.Hidden = False Columns("j:q").Select Selection.EntireColumn.Hidden = False 'コードの個数を数える Workbooks(book1).Activate Sheets("B").Select ITI4 = Range("b65536").End(xlUp).Address '----b列の最終行から上方向の終端セルを選択 Set myRange = Worksheets("B").Range("b6", ITI4) answer = Application.WorksheetFunction.Count(myRange) Set myRange1 = Worksheets("B").Range("e8") For c = 1 To answer 'データー個数のカウント If myRange1.Offset(c) = myday Then n = n + 1 Next 'オーフィルターの設定 Workbooks(book1).Activate Sheets("B").Select ITI1 = Range("b65536").End(xlUp).Address '----b列の最終行から上方向の終端セルを選択 ITI7 = Range(ITI1).Offset(, 11).Address Range("a8", ITI7).AutoFilter FIELD:=5, Criteria1:=Format(myday,"yyyy/m/d") >>>>>ここでオーバーフローエラー 前回指摘されたCriteria1:=mydayをCriteria1:=Format(myday,"yyyy/m/d") に追加変更しました。 読みにくいかもしれませんがよろしくお願いします。

  • このような場合のエラーの呼び方

    dim hairetu(10) as int16 ----------------------- textbox1.text=hairetu(11) -------------------- 実行するとエラーになりますよね? このようなエラーの呼び方(オーバーフローなどの)があれば、教えてください。

  • EXCEL2010エラーVBA

    下記を実行するとエラーになりEXCEL2010が終了してしまいます。 fDebug:0 offset00009391 がエラーメッセージです。 何が原因でしょうか。 Private Sub Worksheet_Change(ByVal Target As Range) Dim ws As Worksheet Dim rg As Range Dim r As Variant Dim c As Long Dim hanni1 As Range Dim atai As Range Set ws = Worksheets("あああ") Set rg = Worksheets("コード").Range("A1:B10") r = ws.Cells(Rows.Count, 1).End(xlUp).Row Set hanni1 = ws.Range(Cells(2, 2), Cells(r, 3)) Set atai = ws.Range(Cells(2, 3), Cells(r, 3)) atai = Application.VLookup(hanni1, rg, 2, False) End Sub

専門家に質問してみよう