【Excelマクロ(VBa)】ローカル変数とグローバル変数について


 ローカル変数とグローバル変数


変数には、関数内(Sub~End Sub)でしか使えないローカル変数とプログラム内(1ファイル内のExcelマクロ)で使えるグローバル変数の2種類があります。

管理人がプログラムを始めた頃は、1プログラムをどのような関数の構成にするか見通せなかった事と、どんな変数・型が必要か読めなかった事もあり、試行錯誤しながら開発していました。

従って、関数毎にいちいち変数定義をしなければならない苦痛さから「全てグローバル変数にしてしまえ!」と乱暴な考え方をした時期がありました。(実際にはやりませんでしたが・・)

しかし、複雑なプログラムの小さな関数の中でしか使われない変数をグローバル化する意味はなく無駄なメモリを確保する等、デメリットしかありません。

Excelマクロ(VBa)は変数定義をしなくても変数として利用できる場合があり、初心者にはとっつき易い開発環境ですが、この環境に慣れてしまわないように変数定義は厳密にしましょう。[途中で型を変えたりすると影響箇所が大きいです!]



 ローカル変数の設定方法


ローカル変数は Sub ~ End Sub の中に [ Dim 定義した文字 As 型 ] で設定します。
定義した文字は、下記 intX, intY のようにカンマ区切りで複数定義する事ができます。

Sub test()
  Dim intX, intY As Integer '数値X, 数値Y
  Dim strUserID As String 'ユーザーID
     ・
     ・
End Sub



 グローバル変数の設定方法


グローバル変数は Dim の代わりに Globalを使い、 [ Global 定義した文字 As 型 ] で設定します。なお、グローバル定数は[ Global Const 定義した文字 [As 型] = (不変な)値 ]で設定します(参考「定数と変数について」)

定義する場所ですが、Microsoft Excel Objectsの中(Sheet や Book)の中に定義しようとすると、コンパイルエラーが発生します。(例として strTest という文字列変数を作成します)

  

エラーの内容は「定数、固定長文字列、配列、ユーザー定義型およびDeclareステートメントは、オブジェクトモジュールのパブリック メンバーとしては使用できません。」というものです。

  

従って、まず標準モジュールを作成します。
作成方法は、[プロジェクト エクスプローラー](表示されていなければ[表示]メニューから[プロジェクト エクスプローラー]を選択)上で右クリックを押し、[挿入] - [標準モジュール] を選択します。

  

[標準モジュール]のフォルダに[Module1]が作成されるので、その中にグローバル変数定義を行います。

  

これで、このExcelマクロ内ならば何処でも strTest という文字列変数を利用する事が可能となりました。



管理人 について

趣味:映画鑑賞・音楽鑑賞・ゲーム・旅行 仕事:会社員(IT関連)
カテゴリー: VBa(Excelマクロ), システム開発 パーマリンク

コメントを残す