ローカル変数とグローバル変数
変数には、関数内(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 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 という文字列変数を利用する事が可能となりました。