【Excel VBA】32ビット版から64ビット版への変更方法

Excel VBA

Excel VBAは、Excelの機能を自動化したり、カスタマイズしたりするのにとてもに便利なツールです。しかし、32ビット版のExcelで作成したVBAプログラムを64ビット版のExcelで動作させようとすると、いくつかの変更が必要になる場合があります。この記事では、初心者向けにその変更方法を具体的に説明します。

32ビット版と64ビット版の違い

まずは、32ビット版と64ビット版の違いについて簡単に説明します。
ビット数は、処理できるデータ量の単位です。一般的に、64ビット版は32ビット版に比べて大きなデータを扱うことができ、パフォーマンスも向上します。しかし、その反面、64ビット版は32ビット版用に書かれたプログラムをそのまま動作させることができない場合があります。

32ビット版VBAコードの典型的な問題

32ビット版のVBAで書かれたコードを64ビット版で実行しようとすると、主に次のような問題が発生することがあります。

DeclareステートメントでのPtrSafeキーワードの不足

外部ライブラリやAPIを呼び出すためのDeclareステートメントが、64ビット版ではそのまま使えないことがあります。

コンパイルエラー

Long型とLongPtr型の違い

32ビット版ではLong型がよく使われますが、64ビット版ではメモリの扱い方が異なるため、LongPtr型に変更する必要があります。

Windows APIの呼び出しの問題

32ビット版用に設計されたWindows APIの呼び出しが、64ビット版では動作しないことがあります。

64ビット版での対応方法

では、32ビット版VBAコードを64ビット版で動作させるために必要な変更方法を見ていきましょう。

PtrSafeキーワードの追加

外部ライブラリやAPIを呼び出すDeclareステートメントを使う場合、64ビット版ではPtrSafeキーワードを追加する必要があります。例えば、次のようなコードがあるとします。

Declare Function GetTickCount Lib "kernel32" () As Long

このコードは32ビット版では問題なく動作しますが、64ビット版では次のように変更する必要があります。

Declare PtrSafe Function GetTickCount Lib "kernel32" () As Long

PtrSafeキーワードを追加することで、このコードが64ビット版でも実行できるようになります。

LongPtr型の使用

メモリのアドレスを扱う際には、32ビット版ではLong型が一般的に使用されますが、64ビット版ではLongPtr型に変更する必要があります。例えば、次のようなコードがあるとします。

Dim hwnd As Long

64ビット版では、これを次のように変更します。

Dim hwnd As LongPtr

LongPtr型は、32ビット版と64ビット版の両方で動作します。

VBA7の条件分岐を使用

VBAのバージョンに応じてコードを切り替える方法もあります。これは、32ビット版と64ビット版の両方に対応させるために有効です。例えば、次のように条件分岐を使用してVBA7以降(64ビット対応)の場合のコードを記述します。

#If VBA7 Then
    Declare PtrSafe Function GetTickCount Lib "kernel32" () As LongPtr
#Else
    Declare Function GetTickCount Lib "kernel32" () As Long
#End If

このように記述することで、VBA7以前の環境でも、VBA7以降の環境でも問題なく動作するコードが書けます。

参考:
Office の 32 ビット バージョンと 64 ビット バージョン間の互換性 | Microsoft Learn

まとめ

この記事では、Excel VBAで、32ビット版から64ビット版への変更方法について説明しました。
適切な手順を踏めば、それほど難しいものではありません。PtrSafeキーワードの追加、LongPtr型の使用、条件分岐によるコードの切り替えなどを行うことで、移行はスムーズに進みます。この記事を参考に、自分のVBAコードを64ビット版で動作させ、快適なExcelの自動化を実現してください。

タイトルとURLをコピーしました