Skip to content

MS_VBAMigration

nishi_74322014 edited this page Aug 31, 2026 · 1 revision

VBA移行

概要

本ページでは、Office バージョンアップに伴う VBA の環境移行の作業範囲を扱います。

下記のように、旧 Office の VBA プログラムも、概ねそのまま使えるようですが、
コンバージョン(手修正有りのコンバージョン移行)が必要となるケースもあるため、
移行の見積もりに関しては、プログラムの移行性評価作業として、1・2 本のプログラムを
サンプリングし、実際に移行 ~ テストした上で、移行作業全体の工数を見積もることをお薦めします。

Accessバージョンアップ

Officeバージョンアップ

Office97/2000 → 2003移行

株式会社 オデッセイ コミュニケーションズさんの

に VBA 移行の情報が纏まっています。

  • 技術資料
    • Office 97 / 2000 から Microsoft Office 2003 Editions への移行
      Visual Basic for Applications 移行に関するチュートリアル
    • Office 97 / 2000 から Microsoft Office 2003 Editions への移行における、
      Visual Basic for Applications の互換性と注意点

Office97/2000 → 2003 移行時の VBA プログラムについては、概ねそのまま使えるようです。

Office2003 → 2007移行

Office2003 → 2007 移行に関しても、VBA プログラムは、概ねそのまま使えるようです(下記、HP を参照)。

VBA の基本仕様は変わっていませんが、一部、検討課題もあるようです。
解決方法としては、1 つ・1 つ調べての対応となるようです。

Office2010移行

対応方法としては、上記と大差ないようです。

VBA の基本仕様は変わっていませんが、一部、検討課題もあるようです。
解決方法としては、1 つ・1 つ調べての対応となるようです。

Office2010 64bit版 移行

32bit 版の Office であれば 64bit の OS 上でも
WOW64 上で 32bit で動作させることができ、問題はそれほど多くありません。

64 ビット版の Office では、下記の点に注意が必要になります。

  • ActiveX コントロールや COM アドイン
    ActiveX コントロールや COM アドインは 64 ビット環境を想定して
    作られてはいませんので、多くが 64 ビット版の Office では動作しません。

  • VBA7
    64 ビット版対応に伴い VBA も新しいバージョンである VBA7 になりました。
    殆どの VBA コードは 64 ビット版 Office でもそのまま動作しますが、
    64bit対応などで一部修正が必要になります。

    • LongPtr 型と LongLong 型が追加(変換するための演算子、関数も追加)
      演算子:CLngPtrCLngLng、関数:VarPtrObjPtrStrPtr

    • Declare ステートメントに PtrSafe 属性を追加

    • VBA7Win64 という 2 つの条件付きコンパイル定数が追加

    • また、64 ビットバージョンのコモンコントロールが含まれていない。

移行メモ(正誤): 元ページの「64 ビット版fficeでも」は
「64 ビット版 Office でも」の誤記と判断し、修正した。

補足(現在は 64bit 版が既定): 本ページ記述時点(2010 年前後)は
「VBA との互換性を考えて 32bit 版を推奨」だったが、
Microsoft 365 の新規インストールでは 64bit 版が既定に変わっている。
したがって、Declare ステートメントを含む VBA を移行する場合、
上記の PtrSafe / LongPtr 対応は例外ではなく必須作業として
見積もりに含める必要がある。
なお、32bit / 64bit の両方で動かす必要がある場合は、
条件付きコンパイル(#If VBA7 Then / #If Win64 Then)で分岐させる。

参考

  • TechNet Blogs > Microsoft Office 2010 Engineering (日本語訳) > 64 ビット版 Office について
    http://blogs.technet.com/b/office2010_jp/archive/2010/05/05/64-office.aspx

    • VBA との互換性を考えて、既定のインストールでは 32 ビット版 Office 2010 をお勧めしています
    • (更新: ほとんどの VBA コードは 64 ビット版 Office でもそのまま動作しますが、詳しくはこちらの資料を参照してください)。
  • 初心者備忘録 > Office関連 > 64ビット版Officeの注意点(Office 2010)
    http://www.ka-net.org/office/of30.html\ 現段階(2010 年 6 月時点)ではアドイン周り含めて環境が整っていないため、64 ビット版の導入はあまり推奨されていません。

  • TechNet

    • Office > 2010 > ヒント集 > Office 2010 の 64 ビット版と 32 ビット版のどちらを展開するか判断するための 4 つの考慮事項
      http://technet.microsoft.com/ja-jp/office/gg605223
      • ユーザーが実行しているオペレーティング システム
      • 組織で使用しているドキュメントの種類
      • Office をアップグレードするのか、新しくインストールするのか
      • 組織で Office アドインまたは VBA マクロを使用しているか
  • TechNet ライブラリ > Office 2010 リソース キット

  • MSDN ライブラリ > Office 開発 > Office 2010 技術記事\

    Office 2010 の 32 ビット バージョンと 64 ビット バージョンとの互換性
    http://msdn.microsoft.com/ja-jp/library/ee691831.aspx

    • Microsoft Office 2010 の 32 ビット バージョンと 64 ビット バージョンについて
    • 比較 : 32 ビット システムと 64 ビット システム
    • VBA 7 コード ベースについて
    • ActiveX コントロールと COM アドインの互換性
    • アプリケーション プログラミング インターフェイスの互換性
    • 条件付きコンパイル属性の使用
    • まとめ、参考資料

Office2013移行

補足(Office 2013 以降の移行で効く変更点): 元ページは Office 2013 で
記述が止まっているため、以降で VBA 移行に影響する主な変更を補っておく。

  • クイック実行(Click-to-Run)形式が既定になり、
    MSI 形式を前提にしたインストーラ・アドインの配布方法が使えなくなる場合がある。
  • インターネット由来の Office ファイルに含まれるマクロが既定でブロックされる
    (Mark of the Web に基づく既定ブロック)。
    ネットワーク共有やメール添付で配布していた VBA は、
    信頼できる場所(Trusted Locations)の設定
    デジタル署名が必要になる。移行時に見落としやすい実務上の落とし穴。
  • Access Services / Access Web アプリの廃止
    (→ Accessバージョンアップ)。
  • VBA そのものは Microsoft 365 でも現役で廃止予定は示されていないが、
    Web 版 Excel では動作しないため、Web 併用が要件に入ると
    Office Scriptなどへの部分的な置き換えが必要になる。

COMについて

VBA は、VB6.0 の言語仕様が踏襲されているため、COM に処理を依存しているところがありますが、
この VBA から呼び出される COM(ActiveX Control、ActiveX EXE、VB COM)の

  • 「開発環境のサポート期間切れ」に起因する移行対象範囲の拡大や、
  • 「当該プラットフォーム上でのサポート無し」のため、代替ライブラリの I/F 変更発生

に起因する修正範囲拡大の可能性がありますので注意が必要です。

補足: これは VB6の保守 で述べられている
「3RD パーティ製 ActiveX がボトルネックになる」という問題と同じ構図である。
VBA 側は言語仕様が安定していても、参照設定している COM の側で詰まる

参考


Tags: 移行, Visual Basic

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally