VBA

【ExcelVBA】Integer型 VS Long型、速いのはどっち?

vbaIntegerLong
ねぇもりさん、整数を扱うときのデータ型って、いくつかあるよね
もり
もり
代表的なのはInteger型とLong型だね。
扱う数字の大きさによって、使い分けよう
モリ
モリ
おい、その情報、古いぞ

いつも隣にITのお仕事のコーディングガイドライン【随時更新】によると、

整数はLong型で統一で問題ありません。
(中略)
最近のバージョンでは、Integer型として宣言されていても、VBAはすべての整数値をLong型に変換します。したがって、Integer変数を使用することによるパフォーマンス上の利点はなくなりました。実際、Long変数はVBAで変換する必要がないため、少し速くなる可能性があります。

 

もり
もり
なんてこったい!

これまでデータ型の指定にはこだわっていたんですが・・・衝撃・・・

モリ
モリ
百聞は一見に如かずだな、実験するぞ

VBAで整数値を扱うデータ型

この3種類があります。バイト型を使ってるコードはほとんど見たことないですね

データ型 表記 消費メモリ 格納できる値の範囲
バイト型 Byte 1バイト 0~255の整数
整数型 Integer 2バイト -32,768~32,767の整数
長整数型 Long 4バイト -2,147,483,648~2,147,483,647の整数

Integer vs Longの速度テスト

検証環境

ハード・ソフト面

  • Office 2016
  • OS:Windows10 Home 64bit
  • CPU:Core i5
  • メモリ:4GB

計測回数はInteger型、Long型それぞれ100回ずつ
(Integer50回→Long50回→Integer50回→Long50回で測定)

その他

  • Excel以外のアプリケーションはすべて落とす
  • PCの電源コードは繋いでおく
  • Wi-Fiは切断

検証用のコード

速度計測をするときは下記の点に注意しましょう

VBAはワークシートのセルへの書き込み処理の時間がかかるので、セルへの書き込み処理をしないコードで計測すること。

「セルの書き込み」という処理の速度計測をするときはもちろん必要ですが、データ型の比較をするうえでは「セルへの書き込み」は何の意味もないですよね。

n = 10000 ^ 2 =で1憶回の無駄な計算をしてもらいました。

実行結果

100回実行結果のサマリです。

指標 Integer型 Long型
中央値 4.17 秒 3.80秒
最小値 4.125 秒 3.704秒
最大値 4.218 秒 3.891 秒
やっぱりLong型の方が速いんだね~

暗黙の型に注意!

変数をまとめて宣言するときも、必ず1つずつ型を指定する必要があります。

Dim a as Long, b as Long, c As Long

Dim a, b, c As Long

このように書くと、それぞれのデータ型はこうなります。

  • a → Variant型
  • b → Variant型
  • c → Long型
モリ
モリ
Variant型は、Integer型よりもメモリを確保するから、その分処理が遅いんだ

知らないうちにVariant型の変数をたくさん使用していると、処理が遅くなる原因になります。

それぞれきちんと型指定をしましょうね。

Integer vs Longまとめ

整数値のデータ型

Integer型はLong型に比べて処理速度が遅く、扱える数値も小さいので、整数値はLong型で統一!

 

もり
もり
これでモヤモヤがスッキリした~
モリ
モリ
みんなも勉強してて気になることがあったら、手を動かして実験してみるといいぞ
非エンジニアもプログラミングを学習する時代!

「プログラミング」ってエンジニアとかプログラマーの人がするものでしょ?文系の私には関係ないや~って思っていませんか?

いまは、非エンジニアもプログラミングを学習する時代です!

「プログラミングの必修化」をご存知ですか?

  • 2020年~ 小学校で開始
  • 2021年~ 中学校で開始
  • 2022年~ 高等学校で開始
  • 2024年~ 高校受験科目に新設

学校での必修化に向けて、すでに子ども向けプログラミングスクールが多数開校されています。

あと数年もすれば、あたりまえにプログラミングができる新入社員がやってくる時代になります。

プログラミングってなに?どんなもの?まずは無料体験から試してみませんか?

 

1週間の無料体験あり!
オンラインスクール実績No.1!