• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:変数への数式の代入でオーバーフローします)

変数への数式の代入でオーバーフロー?Clng関数の役割とは?

ARCの回答

  • ベストアンサー
  • ARC
  • ベストアンサー率46% (643/1383)
回答No.1

lngDaySec = 60 * 60 * 24 式中の定数(60,60,24)が内部的に整数型(Integer)として扱われているせいです。 特に指定しない限り、VBのコンパイラは式の内容を見て定数の型を適当に設定します。 今回の場合、式中に含まれる全ての数値が32767以下であるため、これは整数型の演算であると判断されてしまったのでしょう。 こういった事態を回避するためには、定数の後ろに#を付けることにより、明示的に長整数型だと宣言してやればいいです。 こんな感じです。 lngDaySec = 60# * 60# * 24#

k_o_j_i
質問者

お礼

早速のご回答ありがとうございます。 >式中の定数(60,60,24)が内部的に整数型(Integer) >として扱われているせいです なるほどー。不便ですねー。 左辺を見て判断して欲しい……。

関連するQ&A

  • Evaluate()に数式を代入した変数を渡すには

      VB.NETでEvaluate()関数を使って、プログラム実行中に決まる数式を評価させたいのですが、(1)のように数式をリテラルのまま渡せば正しく評価されるのですが、(2)のように数式を変数に代入して渡すとうまくいきません。数式の構造自体がプログラムの実行中に決まるので、数式を代入した変数を引数として渡す必要がありますが、このような場合、どのようにすればよいのでしょうか。 (1) 引き渡す数式がリテラルの場合 Imports Microsoft.Office.Interop Module Module1  Sub Main()   Dim xlApp As New Excel.Application   Dim x As Integer   x = 1   MsgBox(xlApp.Evaluate(x = 1)) '期待 True  実際 True  結果 OK   MsgBox(xlApp.Evaluate(x <> 1)) '期待 False  実際 False  結果 OK  End Sub End Module (2) 引き渡す数式が代入された変数の場合 Imports Microsoft.Office.Interop Module Module1  Sub Main()   Dim xlApp As New Excel.Application   Dim x As Integer   Dim term1 As String   Dim term2 As String   x = 1   term1 = "x = 1"   term2 = "x <> 1"   MsgBox(xlApp.Evaluate(term1)) '期待 True  実際 -2146826259 結果 NG   MsgBox(xlApp.Evaluate(term2)) '期待 False  実際 -2146826259 結果 NG  End Sub End Module よろしくお願いします(WindowsXP,VS2010)

  • VBAで一時的にオーバーフローを回避したい

    こんにちは とあるハッシュ値のようなものを作成するプロセスで困っています。 次のようなコードを書いています。 Dim MAXLONG As Long MAXLONG = &H7FFFFFFF 'Long型の正の数の上限です。 result = num1 * num2 If ( result > MAXLONG) Then '数値を減らす処理 計算結果が Long 型の最大値を超えている場合に上限に収まるよう調整する処理をしたいのですが、最大値を超えている時点で result 変数に格納できずにエラーになってしまいます。 変数を事前にすべて As Long で宣言し、数値ではなく &H付きの 16 進数で代入してみたり、Clng() で囲ってみたり・・・いろいろ試したのですができません。 最終的には Long 型の範囲内に収めてその数値を使いたいのですが、一時的に溢れたかどうかをどのように判定すればよいのでしょうか? 補足すべき事があれば教えてください。 Windows 7 Pro 64bit Excel 2007 (これは32bit)

  • マスクをとるとオーバーフローします

    VBで4byteの数字の上位2バイト、下位2バイトをとりだす方法を教えてください。 以下のコードの8行目で(9行目も同様)オーバーフローしてしまいます。 1 Dim inputData As Double 2 3 Dim d1 As Double 4 Dim d2 As Double 5 6 inputData = 65538 'd1=1, d2=2を期待 7 d1 = inputData And 65535 'FFFFでマスク 8' d2 = inputData And 4294901760# 'FFFF0000でマスク 9 d2 = CDbl(inputData And 4294901760#) 'FFFF0000でマスク

  • 変数の代入について

    他のファイルを参照し変数に代入しましたが 参照式まで代入されてしまいますが、これを回避したいです。 ='C:\フォルダ名\[ファイル名.csv]シート名'!$A$1 理由としては、参照先を知られたくないためです。 Dim A(9) As Variant A(0) = Path & "!$A$1" 'ここの部分の書き方を教えてください。 .Range("B1").Value = A(0) 変数は入力ミスをした場合に元に戻すために使います。

  • 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 これを実行したらオーバーフローしてしまい、途中までしか計算できませんでした。 解決方法を教えて頂きたいです。よろしくお願いします。

  • 変数にnullを代入するには

    諸事情で、変数の値をNullにしたいのですが、 Sub a() Dim mystr As String mystr = "moji" '他の処理 mystr = Null End Sub だと、実行時エラー94になります。 多分、NULLは値じゃないから代入できないんだと思いますが、どうすれば変数をnullにできるのでしょうか? String型が問題であれば、何にすればいいですか?

  • サブフォームに変数を代入し、RecordSourceの値を取得したい

    サブフォームに変数を代入し、RecordSourceの値を取得したいのですがうまくいきません。 Sub test1() Dim サブフォーム As String Dim フォーム As String フォーム= "土台" サブフォーム = "フォーム1" MsgBox Form_フォーム1.RecordSource End Sub ******************************************************************* Sub test2() Dim サブフォーム As String Dim フォーム As String フォーム= "土台" サブフォーム = "フォーム1" MsgBox Form_フォーム1.RecordSource MsgBox Forms(フォーム).Controls(サブフォーム).RecordSource End Sub オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438) ******************************************************************* Sub test3() Dim サブフォーム As String Dim フォーム As String フォーム = "土台" サブフォーム = "フォーム1" MsgBox Forms(サブフォーム).RecordSource End Sub 実行時エラー'2450' マクロの式またはVisual Basic コート゛で参照されている 'フォーム名'フォームが見つかりません。 ******************************************************************* test1~3のうち test1のみはうまくいくのですが 変数を代入したいです。 ヘルフ゜のには Forms![受注]![受注サブフォーム].Formとなってますが これじゃ変数を代入できないですよね。 どうすればサブフォームに変数を代入しつつ、RecordSourceの値を取得できるのでしょうか? よろしくお願いします。

  • Excel2003でテキストのデータをセルに代入

    初めまして。 私はWindowsXPのExcel2003のVBAでテキストファイル のデータ(カンマ区切り)を指定したセル行に代入 したいと思っているのですが上手くいきません。 下記のコードを実行したところ、 Dim n As Long, buf As Variant, tmp As String Dim lrow As Long lrow = 14 n = FreeFile Open "C:\TEKISEI.txt" For Input As #n fname = "C:\TEKISEI.txt" Do Until EOF(n) Input #n, tmp lrow = lrow + 1 buf = Split(tmp, ",") Worksheets("Sheet1").Range("B14:B30") = buf Loop Close #n 指定したセル行(B14:B30)にテキストファイル (中身はカンマ区切りの数字の羅列)のデータの 最後の数字がセル行に入ってしまいます。 このコードでセル列(B14:P14)ならセルごとに 順に数字が代入されましたが、これをセル行に代入 したいと思っています。 どこが悪いのか皆様にご教授願います。

  • JavaScriptの変数への代入について

    <単純なデータ型> 1. 以下のようなケースでxに5という値を代入すると1行目の「let x = 1;」で「x」の値が5に変わるというのは理解できます。 この場合、2行目は「y」の値は「1」のままです。「5」でないのがわかりません。 代入したことによって「let y =x」へは影響を及ぼさないのはなぜですか? 少なくともスコープの範囲以内は代入の影響が出るものと考えてしまいます。 { let x = 1; let y = x; x = 5; console.log(x); //5 console.log(y); //1 } <配列> 2.このような配列の場合、「x[0]」に配列である[1, 2];が代入されているわけですよね。 以下のように「x[0]」に5を代入した場合、console.logで見てみると、[5, 2]となるのは理解できます。 しかし、2行目の「let y = x;」も[5, 2]となっています。 上の単純なデータ型のケースをもとに考えるならば、ここは[1, 2]のままでないのはなぜなのでしょうか? 試しに自分で「x[1]」に書き換えてみると両方とも「1, 5」となります。 { let x = [1, 2]; let y = x; x[0] = 5; console.log(x); //[5, 2] console.log(y); //[5, 2] } なぜ、単純なデータ型と配列ではパターンが異なってくるのでしょうか? 初心者です。学習中でまだ基礎的な段階なのですが、つまづいてしまいました。 分かる方いらっしゃいましたら教えて下さい。よろしくお願いいたします。

  • VBAにて計算式をセルへ代入できなくて困っています

    計算式を変数QRdataへ代入し その変数から指定のセルへ入力するとき、実行時エラー1004となってしまい マクロを実行できずに困っています。 Cells(3, 6).ValueもRange("F3").Fourmulaと変えたりしたのですが解決方法が解らなく どうか御教授下さい。 Dim コードナンバー As String Dim 品名1行 As String Dim QRdata As String QRdata = "=("& Chr(34) & コードナンバー & 品名1行 & Chr(34) & ",1)" Cells(3, 6).Value = QRdata  ←ここでエラーとなってしまいます。