カタバミさんのプログラミングノート

日曜プログラマーがプログラミング関係のメモを記録するブログです。

VBAにおける64ビット対応

概要

ExcelやWord等のMicrosoft Officeで使用されるVBAの64ビット対応の概要。詳細は以下の公式ドキュメントをご覧ください。 docs.microsoft.com

内容

VBAの64ビット対応はVBA7から導入されており、3つの重要な追加機能、条件付きコンパイル定数、型変換関数及び定数に大別できます。

3つの重要な追加機能

  1. PtrSafe
  2. LongPtr
  3. LongLong

3つの重要な追加機能はDeclareステートメントの確認を強制するPtrSafeと2つの新しい型LongPtr、LongLongです。

64ビット環境のVBAではDeclareにPtrSafeが強制されるため、VBAの実行前に32ビットと64ビットで扱いが異なる型が適切に変更されているかどうかを確認することができます。

LongPtrはC/C++のポインタと同じサイズであり、32ビットのDeclareでポインタに使われているLongを置換するために使用されます。LongPtr及びポインタは32ビット環境では4バイト(Long型)、64ビット環境では8バイト(LongLong型)となり、適切な相互運用を可能としています。LongPtrの代わりにLongを使用したままの場合、ポインタは正確なアドレスを示すことができずにエラーが発生します。

LongLongは8バイト整数型です。

条件付きコンパイル定数

  1. VBA7
  2. Win64

PtrSafe等の64ビット対応はVBA7から導入されました。条件付きコンパイル定数としてVBA7が定義されているかどうかを確認することで、PtrSafeが使用可能かどうかをコンパイル時に分岐することができます(注意:VBA7は真偽のみ確認されるため、VBA8等が開発された場合はVBA8定数も確認することになると予想されます)。

Win64は実行環境が64ビットである場合に真を返します。

型変換関数及び定数

  1. CLngPtr
  2. CLngLng
  3. vbLongLong
  4. DefLngPtr
  5. DefLngLng