エクセルVBA変数のスコープ
すべてのプログラミング言語には、定義された変数にアクセスできる場所を定義する変数アクセス指定子があります。 ExcelVBAも例外ではありません。 VBAにもスコープ指定子があります。これらのスコープ指定子を使用して、ExcelVBAの変数の可視性/スコープを設定できます。
Excel VBAには、次の3種類のスコープ指定子があります。
。手順レベル。プライベート-モジュールレベル。パブリック-プロジェクトレベル=== VBAプロシージャレベル変数スコープサブルーチン内で宣言された変数は、そのプロシージャ/関数でのみアクセスできます。それらには、プロシージャレベルのスコープがあります。それらは通常、Dimキーワードで宣言されます。モジュールがオプション暗黙的である場合、変数は宣言されておらず、直接使用されている可能性があります。
以下の例では、変数xとyを持つサブルーチンスコープテストがあります。最初のサブルーチンを実行すると、完全に実行され、XとYの合計が出力されます
Option Explicit Sub scopeTest() Dim x, y As Integer ' Procedure level variable in VBA x = 2 y = 3 Debug.Print x + y End Sub Sub sum() x = 5 y = 7 Debug.Print x + y End Sub
ただし、サブルーチンsumを実行すると、変数が宣言されていないというエラーがスローされます。どうして? XとYはプロシージャscopeTestにプライベートであり、サブルーチンsumはそれらにアクセスできないためです。
したがって、潜水艦はエラーに遭遇します。
VBAプライベート変数-モジュールレベルのスコープモジュール全体でアクセスする必要がある変数を宣言する場合は、サブルーチンまたは関数の前に、モジュールの上部でその変数をプライベートとして宣言します。
モジュール内のサブルーチンの前に宣言された変数は、デフォルトでプライベートです。 Dimキーワードで宣言しても。ただし、具体的には、Privateキーワードを使用することをお勧めします。
以下の2つの手順は、同じモジュール、モジュール1にあります。
Option Explicit 'Module level variable in VBA. Both variables x and y are private to this module. and 'can be accessed from any sub or function within this module. Dim x As Integer Private y As Integer Sub scopeTest() 'This can be accessed from any module in the project x = 2 y = 3 Debug.Print x + y End Sub Private Sub sum() ' This can't be accessed from other modules x = 5 y = 7 Debug.Print x + y End Sub
変数xとyはこのモジュールのプライベート変数であるため、上記の2つの関数は完全に正常に実行されます。
重要:xとyに格納されている最後の値は、モジュール全体になるまで保持されます。最初にサブscopeTestを実行し、サブサムのxとyの値を初期化して実行しない場合、xとyの初期値は変更されません。
以下のサブルーチンは、別のモジュールであるモジュール2で定義されています。別のモジュールから変数にアクセスしようとすると、VBAプロシージャ(または関数)でエラーが発生します。
しかし、モジュール2のモジュール1からサブルーチンsumを呼び出そうとすると、これは完全に機能します。関数とサブルーチンをモジュールに対してプライベートにするには、subとfunctionの前にキーワードPrivateを使用します。
注:-モジュール内のサブルーチンまたは関数の前に宣言された変数は、デフォルトでモジュール専用です。 Privatekeywordを使用できます。ただし、関数とサブルーチンはデフォルトでパブリックであり、プロジェクト内の任意のモジュールからアクセスできます。関数とサブルーチンをモジュールに対してプライベートにするには、Privateキーワードを使用する必要があります。===パブリック変数-プロジェクトレベルのスコープ上記の例で学習したように、関数とサブルーチンはデフォルトでパブリックであり、任意のモジュールからアクセスできます。しかし、変数はそうではありません。 Excel VBAの任意のモジュールから変数にアクセスできるようにするには、Publicキーワードを使用します。*プロジェクトでpublic変数を宣言するには、publicキーワードを使用する関数またはサブルーチンの前に、モジュールの先頭で変数を宣言します。以下のコードはモジュール1で記述されています。
Option Explicit 'Project level variable in VBA. Public x As Integer Public y As Integer Public Sub scopeTest() 'This can be accessed from any module in the project x = 2 y = 3 End Sub Private Sub sum() ' This can't be accessed from other modules x = 5 y = 7 Debug.Print x + y End Sub
そして、このサブルーチンは別のモジュール、モジュール2にあります。
Option Explicit Sub mul() Call scopeTest 'Call sum ' it won't work as it is private to the module 1 Debug.Print x * y End Sub
今回は完璧に動作します。
まず、サブルーチンscopeTestを呼び出しました。 scopeTestはパブリックであるため、呼び出されます。 xとyの値を初期化します。次に、xとyを乗算します。 scopeTestサブルーチンが値2と3で初期化したため、得られる結果は6です。
そうですね、これがExcelの変数スコープ指定子を使用して、Excel VBAプロジェクトの変数、関数、およびサブルーチンの可視性を制御する方法です。
VBAのアクセス指定子をできるだけ簡単に説明しようとしました。説明だったと思います。この記事またはその他のVBA関連の疑問について疑問がある場合は、以下のコメントセクションで質問してください。私はあなたからここに幸せになります。
関連記事:
link:/ cells-ranges-rows-and-columns-in-vba-what-is-the-difference-between-byref-and-byval-arguments-vba-interview-question [ByRef and ByVal Arguments]
|いつ引数がByRef引数として別のサブまたは関数に渡されると、実際の変数の参照が送信されます。変数のコピーに加えられた変更は、元の引数に反映されます。
link:/ files-workbook-and-worksheets-in-vba-delete-sheets-without-confirmation-prompts-using-vba-in-microsoft-excel [MicrosoftExcelのVBAを使用して確認プロンプトなしでシートを削除する]
|以降あなたはVBAを使用してシートを削除しています、あなたはあなたが何をしているのか知っています。この警告を表示せず、いまいましいシートを削除しないようにExcelに指示します。
link:/ files-workbook-and-worksheets-in-vba-add-and-save-new-workbook-using-vba-in-microsoft-excel [Microsoft Excel2016でVBAを使用して新しいブックを追加および保存する]
|このコードでは、最初にワークブックオブジェクトへの参照を作成しました。次に、新しいブックオブジェクトで初期化しました。このアプローチの利点は、この新しいワークブックの操作を簡単に実行できることです。保存、閉じる、削除などのように `link:/ menus-toolbars-status-bar-in-vba-display-a-message-on-the-statusbar-using-vba-in-microsoft-excel [Display A Message On ExcelVBAステータスバー] `Excelのステータスバーはコードモニターとして使用できます。 VBAコードが長く、VBAを使用していくつかのタスクを実行する場合、画面のちらつきが表示されないように、画面の更新を無効にすることがよくあります。 `link:/ general-topics-in-vba-turn-off-warning-messages- using-vba-in-microsoft-excel [Microsoft Excel2016でVBAを使用して警告メッセージをオフにする] `|このコードは、VBAアラートを無効にするだけでなく、コードの時間効率も向上させます。方法を見てみましょう。
人気の記事:
link:/ keyboard-formula-shortcuts-50-excel-shortcuts-to-increase-your-productivity [生産性を高めるための50のExcelショートカット]
|あなたの仕事をより速くしてください。これらの50のショートカットにより、Excelでの作業がさらに高速になります。
link:/ forms-and-functions-introduction-of-vlookup-function [ExcelのVLOOKUP関数]
|これは、さまざまな範囲やシートから値を検索するために使用される、Excelの最も使用され人気のある関数の1つです。 link:/ Tips-countif-in-microsoft-excel [COUNTIF in Excel 2016]
|この驚くべき関数を使用して、条件付きの値をカウントします。特定の値をカウントするためにデータをフィルタリングする必要はありません。
ダッシュボードを準備するには、Countif関数が不可欠です。
link:/ excel-formula-and-function-excel-sumif-function [ExcelでSUMIF関数を使用する方法]
|これは、ダッシュボードのもう1つの重要な機能です。これは、特定の条件で値を合計するのに役立ちます。