• ベストアンサー

変数のデータ型  Integer と Long

数値型を宣言する時に  Integer と Longのどちらを使えばいいかの判断ができません。 例えば、 For i = 1 To 30000 Next というコードの場合は、最大数が30000なので Integerをでiを宣言すればいいのでしょうか? (30000以上になることはないとする) ここでLongで宣言した場合、どういうデメリットが発生しますか? メモリを多く確保するため、パソコンの動きが遅くなるのでしょうか?

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

  • ベストアンサー
  • yayayayai
  • ベストアンサー率38% (5/13)
回答No.1

確かにIntegerよりLongの方がメモリを喰う=遅くなる という考え方が正しいかもしれませんが、今現在のPCのスペックを 考えると誤差範囲(まず違いを体感する事はない)だと思います。 知識として覚えておくといった程度でしょうか。

lkjhgfdkk
質問者

お礼

大した違いはなさそうですね。有難うございました。

その他の回答 (3)

  • yucco_chan
  • ベストアンサー率48% (828/1705)
回答No.4

私も最近までメモリを消費せず高速との思い込みでIntegerを多用していました。 が、とあるWebで、今時の32BitOS&CPUでは16bitのIntegerは意味の無い 過去の遺物でLongを使うべきとの記述を見ました。 真偽は分かりませんが、32BitOS&CPUで16bitのデータを扱うには返ってオーバーヘッドが 生じて遅くなったり、それを避けるために16Bitデータを擬似的に32Bitデータとして 扱うためにメモリの節約にならないとの解説に、私には正しい情報且つ納得できる ものでしたので、最近はLongを使うようにしています。 体感的には、何も変わりませんが。。。 不確かな情報ですが参考までに。

lkjhgfdkk
質問者

お礼

大変参考になりました。ありがとうございます。

  • myRange
  • ベストアンサー率71% (339/472)
回答No.3

そこら辺りのことはVBAのヘルプに載ってますが、 探し出せない時は、 「VBA データ型 一覧」などをキーにしてネット検索してみてください たっぷりヒットします。 例えば、下記サイト。 http://www.optimizm.jp/002/hensu_03.shtml また、質問のようにFor Nextでまわすくらいのことなら 処理スピードは、Integer,Long、殆ど変りないでしょう。 それよりもデータ型を覚えることが先です。 以上です。

lkjhgfdkk
質問者

お礼

わかりました。覚えます。ありがとうございます。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 私の記憶に間違いがなければ、現在は、Long 型のほうが速かったはずです。Integer 型は、16bit ですが、最近のパソコンは、CPUが32bit ですから、Integer 型は、一旦、32bit に変換されるので、Long 型のほうが処理スピードは速いという話です。 VBAの場合は、VBA用として割り当てられるメモリが小さいので、Integer によるメモリの節約の目的で使うのですが、目一杯に使う人はいないので、あまり大きな違いが現れないようです。VBAで速度がもっとも遅くなる原因は、実行時のオブジェクトの入れ出しの多さですね。

lkjhgfdkk
質問者

お礼

IntegerでもLongでもかわらなそうですね。有難うございました。

関連するQ&A

  • コードの簡略化(変数を少なくできますか?)

    カレンダーの作成(4ヶ月分)で 月、曜日、月-日、Do_ITを書き出すセル幅及び高さを VBAのコードでそれぞれ指定しています。 現在、以下のコードですが いかにも変数(i2-i10)の数が多くと無駄のように思えます。 もう少し、スッキリ短く成るコードに出来ませんか ? Dim i1 As Integer, i2 As Integer, i3 As Integer, i4 As Integer Dim i5 As Integer, i6 As Integer, i7 As Integer, i8 As Integer Dim i9 As Integer, i10 As Integer 'セル幅の調整 Columns("B:H").ColumnWidth = 10 'セルの高さ調整 (月の行) For i1 = 1 To 40 Step 13 Rows(i1).RowHeight = 14 Next 'セルの高さ調整 (曜日の行) For i2 = 2 To 41 Step 13 Rows(i2).RowHeight = 14 Next 'セルの高さ調整(月-日の行) For i3 = 3 To 11 Step 2 Rows(i3).RowHeight = 16 Next 'セルの高さ調整(月-日の行) For i4 = 16 To 24 Step 2 Rows(i4).RowHeight = 16 Next 'セルの高さ調整 (月-日の行) For i5 = 29 To 37 Step 2 Rows(i5).RowHeight = 16 Next 'セルの高さ調整 (月-日の行) For i6 = 42 To 50 Step 2 Rows(i6).RowHeight = 16 Next 'セルの高さ調整 - Do it For i7 = 4 To 12 Step 2 Rows(i7).RowHeight = 40 Next 'セルの高さ調整 - Do it For i8 = 17 To 25 Step 2 Rows(i8).RowHeight = 40 Next 'セルの高さ調整 - Do it For i9 = 30 To 38 Step 2 Rows(i9).RowHeight = 40 Next 'セルの高さ調整 - Do it For i10 = 43 To 51 Step 2 Rows(i10).RowHeight = 40 Next

  • vb.netって変数宣言、不要ですよね?

    vb.netって変数宣言、不要ですよね? For i = 1 To 10 MsgBox(Str(i)) Next このコードで動いちゃいました。

  • エクセル VBA 変数を一括で宣言したい

    こんにちは。VBAプログラム初心者です。 変数を宣言する際、 dim オーダ番号 as long, オーダ番号2 as long, …オーダ番号100 as long という内容を一括で宣言することは可能でしょうか? イメージ的には下のような感じなのですが。。。 dim i as integer for i = 1 to 100 dim オーダ番号i as long dim 単価i as long next マクロで便利にするつもりが余計面倒になっていて困っております。 解決策を教えていただけましたら幸いです。 何卒よろしくお願いいたします。

  • 変数を動的に作るには?

    変数を作成する際には必要な分だけ一つずつ宣言する必要があるのでしょうか? 例えば、連番を格納する文字列型変数を一時的に100個必要だとすると Dim textdat1 As String = "Number1" Dim textdat2 as String = "Number2" Dim textdat3 as String = "Number3"      ・      ・      ・ と100個宣言しないといけないと思うのですがこれを For i As Integer = 1 To 100 Dim textdat(i) As String = "Number" & i Next i という様な形で変数を作成することは出来ないのでしょうか。 初歩的な質問かもしれませんが、よろしくお願いします。

  • オブジェクト名を変数で参照できますか

    VB初心者です。 配列の場合 Dim str(10) as string と宣言し、i番目のデータを取り出したいときには、str(i) と記述すると思います。 そこで質問ですが、例えばCommandが1~10まであるとします。 オブジェクト名はそのまま(Command1, Command2)で、それぞれのCaptionに違ったデータが入っています。 (例えば、Command1のCaptionには'A' Command2のCaptionには'B'といった感じに) ある文字列があり、For文を使い、CommandのCaptionとその文字列が一致したときに文字列を出力するという処理を行いたいとき、どのように Command1~10のCaptionを回せばいいのでしょうか? コードを記述しておきます。 Dim str(10) as String Dim i as Integer Dim j as Integer for i = 0 to 10 for j = 0 to 10 ☆☆ if Command(i).Caption = str(j) then print.str(j) end if next next ☆☆のところです。 可能であれば回答をお待ちしております。 環境は windows XP, VB6.0 です。

  • Excel VBAにて2の100乗を計算するには

    プログラミングの勉強でVBAを学んでいるものです 以下の様な問題を出されました 2の100乗の値を計算する。この値はLong型で表せる最大の値をはるかに超すので、十分な大きさのInteger型の配列を用意し、その各要素で各けたの値を表す。値を2倍するサブプロシージャ「二倍」を書いてプログラムを完成させ、値を計算せよ。 Option Explicit Sub 二の百乗() Const n As Integer = 200 Dim s(n) As Integer Dim i As Integer, j As Integer s(1) = 1 For i = 2 To UBound(s) 'UBoundは配列の最大の添え字を返す関数 s(i) = 0 Next i For i = 1 To 100 二倍 s Next i For i = UBound(s) To 1 Step -1 If s(i) <> 0 Then Exit For Next i For j = 1 To i Cells(1, j).Value = s(i - j + 1) Next j End Sub セル一つに計算結果を表示させられないことはよく分かるのですが、そのための2の掛け算を全く思いつきません 二倍のサブプロシージャをどのようにすればいいのでしょうか

  • データ検索ネスト Excel VBA

    excel2003でデータ検索の処理をするというマクロをVBAで作成したいのですが、うまく動作しません。自作のVBAを記載してみましたので何が原因なのか教えてください。初心者です、よろしくお願いします。 Sub データ検索() Dim i As Integer, j As Integer, k As Integer, l As Integer Dim myRange As Range Dim IngLastrow As Long IngLastrow = Range("A65536").End(xlUp).Row For i = 3 To IngLastrow For j = 3 To 25 For k = 8 To 53 For l = 3 To 9 Set myRange = Worksheets("データベース").Cells(i, "o").Find(what:=Worksheets("コード").Cells(j, "o").Value, _ LookIn:=xlValues) If Not myRange Is Nothing Then Worksheets("予定").Cells(k, l).Value = myRange.Offset(, -12).Value End If Next l Next k Next j Next i End Sub

  • EXCEL VBA 配列変数の値すべてを返すには

    EXCELは2002ですが、97でも動くと嬉しいです。 《質問》 1~10をランダムに並べるためのプログラムを書きました。 これはこれで動くのですが、一行(3行目)だではなく 4行目にも、5行目にも同じことをしたい場合、 バブルソートの部分をサブルーチン(関数)にしたいのですが X_v() = GetSortArray(n_s,n_v)()とはできません。.cloneもだめですよね。 かといって、要素毎に引くとその度にRndが効いて、1~10が並びません。 どのようにやるのが、スマートなのでしょうか?よろしくお願いします。 《以下プログラム》 Sub Bu_Click() Dim i As Integer Dim j As Integer Const n_e = 10 Const n_s = 1 Dim X_r(n_e) As Long Dim X_v(n_e) As Long Dim temp1 As Long Dim temp2 As Integer Randomize For i = n_s To n_e X_r(i) = Int(Rnd * 10 ^ 9) X_v(i) = i Next i For i = n_s To n_e - 1 For j = n_s To n_e - 1 If X_r(j + 1) < X_r(j) Then temp1 = X_r(j + 1) X_r(j + 1) = X_r(j) X_r(j) = temp1 temp2 = X_v(j + 1) X_v(j + 1) = X_v(j) X_v(j) = temp2 End If Next j Next i For i = 0 To n_e - 1 Cells(3, 3 + i).Value = X_v(i + 1) Next i End Sub Public Function GetSortArray(s As Integer, e As Integer) As Long() Dim r() As Long Dim v() As Long Dim temp1 As Long Dim temp2 As Integer ReDim r(e) ReDim v(e) Randomize For i = s To e r(i) = Int(Rnd * 10 ^ 9) v(i) = i Next i For i = s To e - 1 For j = s To e - 1 If r(j + 1) < r(j) Then temp1 = r(j + 1) r(j + 1) = r(j) r(j) = temp1 temp2 = v(j + 1) v(j + 1) = v(j) v(j) = temp2 End If Next j Next i GetSortArray = v() End Function ありゃ?Tabのスペース消えますね。

  • 変数が勝手に変わります

    Dim i As Integer:Dim i2 As Integer:Dim card(5) As Integer:Dim expectPoint0card(1) As Integer '0枚のカードを交換する場合のすべての選択肢の期待値 Dim expectPoint1card(5) As Integer Sub porkerGame() card(1) = 1: card(2) = 2: card(3) = 3: card(4) = 4: card(5) = 5 getExpectPoint1card expectPoint1card End Sub Sub getExpectPoint1card(expectPoint1card() As Integer) Dim tesu1 As Integer:Dim sum1 As Integer For i = 1 To 5 getTesuSum1 i, tesu1, sum1 expectPoint1card(i) = sum1 / tesu1 Next i End Sub Sub getTesuSum1(rowNumber As Integer, tesu1 As Integer, sum1 As Integer) Dim card2(5) As Integer:tesu1 = 0:sum1 = 0 MsgBox rowNumber copy card, card2, 5 MsgBox rowNumber For i = 4 To 55 MsgBox rowNumber card2(rowNumber) = i addTesuSum card2, tesu1, sum1 Next i End Sub Sub copy(row() As Integer, row2() As Integer, i2 As Integer) For i = 1 To i2 row2(i) = row(i) Next i End Sub 上記のプログラムで、ウィンドウに1,6,4,5,6と表示され、その次には、エラーが表示します。僕は、ウィンドウに表示される変数RowNumberの値がしばらくの間は1のままであるようにプログラムを書いたつもりなのですが、変数rowNumberの値が変わるのは、どうしてでしょうか?教えてください。お願いします。

  • 【Excel_VBA】オブジェクト名の変数

    ExcelVBA(2007)でシートのオブジェクト名を変数で回したく、下記コードを用いたのですがエラーが出現します。 【コード】 Dim i As Integer For i = 1 To 10 Sheet & i.Activate Next i 【エラー内容】 コンパイルエラー: 修正候補:式 この場合、どのような方法を用いたらシートのオブジェクト名を変数でうまく回すことができるのか、ご教授いただければ助かります。 よろしくお願いします。

専門家に質問してみよう