EXCEL、VBAプログラミング入門7~Public変数について~

今回は、主にはPublic変数について説明をしております。

具体的には本セクションでは前回までの復習として、
1)デザインモードと実行モード
2)プロパティを開く
3)オブジェクト名とプロシージャ名の関係
について解説をしております。さらに、今回の説明としては
4)IF文について
5)プロシージャ処理について
6)プロシージャ内の変数のスコープ(変数の有効範囲)
7)Public変数について
8)元の位置に移動(定義位置から元の位置に戻る)
9)モジュール変数について
10)コメント行について
について解説を行っております。

前回のところでは、「1」というボタンを押した際の処理の途中までご説明をさせていただきました。下図の左側が「1」というボタンで、右側がボタンをクリックした際の処理に該当します。

前回までで以下の部分の処理について説明をしました。
Dim ワーク As String

ワーク = Range(“b3”).Value
Range(“b3”).Value = ワーク & “1”

ここで、プロシージャについて復習をしておきます。
以下の
1)デザインモードと実行モード
2)プロパティを開く
3)オブジェクト名とプロシージャ名の関係
に関しては、シート上のボタンとプロシージャの関係について説明をしております。

1)デザインモードと実行モード
Excel上から設計情報を確認するには次のように行います。下図のように、上部の開発タグを選択後に、中段の「デザインモード」をクリックします。その状態で、下部のボタン「1」を選択します。

「デザインモード」を選択していると下段のボタンを押しても処理は実行されずに、ボタンが選択されるようになります。

通常の実行モードにするには、下図の通りに再度、上段の「デザインモード」を押して「デザインモード」が選択されていない状態にします。その状態で、下段の「1」ボタンを押すと処理が実行されます。

2)プロパティを開く
下図のように上部の開発タグを選択後に、中段の「デザインモード」をクリックして、デザインモードにします。その状態で、下部のボタン「1」を右クリックするとメニューが出てきますので、その中でプロパティを選択します。

下図の通りにプロパティを開きます。

3)オブジェクト名とプロシージャ名の関係
下図の通り、右側のプロパティウィンドウを確認します。プロパティウィンドウの上段のオブジェクト名欄が「cmd1」となっています。

下図の通り、Visual Basic エディターの上段左側に「1」ボタンのオブジェクト名「cmd1」が選択されており、上段右側に「1」ボタンに対するボタンをクリックした際のイベント名である「click」が選択されています。

「cmd1」に対する「click」イベントのプロシージャ名(処理名)は
下段の通り、
Private Sub cmd1_Click()
という名前になります。

プロシージャとは、1つの処理単位を表しています。ここでは、ボタン「1」がクリックされた処理を表しています。

同様にして、下図の通りにボタン2に対するオブジェクト名を確認するには、上段のデザインモードが選択されている状態で下段右側のボタン2を選択すると右側のプロパティウィンドウでオブジェクト名が「cmd2」と入力されていることが確認できます。

オブジェクト名「cmd2」に対するボタンがクリックされた際の処理は、下図の通りVisual Basic エディターの上段右側に「2」ボタンのオブジェクト名「cmd2」が選択されており(上段左側)、ボタンをクリックした際のイベント名である「click」が選択された(上段右側)状態であるプロシージャ名「cmd2_Click()」(下段)が該当しています。

前回までの復習はここまでとして、今回はそれ以降の部分について解説をさせていただきます。

4)IF文について
IFに関しては、構文は以下のようになっております。
If 条件内容 Then
条件に合致した場合の処理の内容
End If

条件に合致しない場合は、Then~End Ifの部分の処理は行われません。

今回の処理では次のようにプログラムが記載されております。
If 表示モード = “結果” Or 表示モード = “記録” Then
Range(“b3”).Value = “”
End If

「表示モード = “結果” Or 表示モード = “記録”」が条件式に該当し、条件式に合致した場合には、
Range(“b3”).Value = “”
の処理が行われます。

つまり、「表示モード = “結果” Or 表示モード = “記録”」の条件式に合致しない場合には、End If まで、処理が飛ばされることになります。

5)プロシージャ処理について
前回までの復習となりますが、1ボタンがクリックされた場合の処理は、下図の部分が該当します。つまり、Private Sub cmd1_Click() ~ End Subまでが処理内容となります。

6)プロシージャ内の変数のスコープ(変数の有効範囲)
cmd1_Click()内で以下の通りで定義されている「ワーク」変数はEnd Subまでしか有効ではありません。
Dim ワーク As String

7)Public変数について
下図の通りに中段の表示モードという変数は、cmd1_Click()内では定義されていません。

表示モードという変数がどこで定義されているかを確認するには、下図の通り、「表示モード」という文字上で右クリックして、メニューから「定義」を選択することで確認できます。

上図の通り「定義」を選択すると、左側の標準モジュールの「Module1」が選択された状態となり、右側に
Public 表示モード As String
とあり、表示モードという変数の宣言部分が選択されます。

**************************************************************
8)元の位置に移動
現在は、cmd1_Click()内で使用されている変数「表示モード」がどのように定義されているかを確認するために、変数「表示モード」の上で右クリックして、変数の表示箇所まで飛んだ状態です。

その状態で下図の通り、上段の「表示モード変数」という文字の上で、右クリックして下段のメニューから「元の位置へ移動」を選択するとcmd1_Click()の処理の表示箇所に戻ることができます。

下図は、処理後にcmd1_Click()の処理に戻ったところです。

**************************************************************

Public 表示モード As String

「表示モード」という変数は、String型、文字型として定義されています。また、前方に「Public」という文字があります。これがPublic(パブリック)変数と呼ばれるものです。

「Public」というのは、システム全体で使用可能な変数であることを示しています。

システム全体で使用可能とはどういうことかというと、cmd1_Click()処理ではないところで設定された値をcmd1_Click()内で使用することが可能であるということです。

もう少し具体的に説明します。

例えば、下図の通り、開発タグでデザインモードが選択されている状態で、計算ボタンの右クリックを押すと、メニューが表示されます。そのメニュー内で「コードの表示」を選択すると計算ボタンがクリックされた処理が表示されます。

下図の通りに計算_Click()プロシージャが表示されます。この部分は、「計算」ボタンをクリックした際に行われる処理を表しています。

まだ、説明を行っていない部分にはなりますが、
Call 四則演算(前の演算子)
で、Callとは別のプロシージャを呼び出す処理を行います。

下図の通り、四則演算という文字の上で、右クリックして、表示されたメニューから定義を選択すると、「四則演算」という処理に移動します。計算_Click()内で、「四則演算」という処理を動かすことを意味しています。

上図で選択すると下図の通り
Function 四則演算(演算子 As String)
と「四則演算」処理内に移動します。

細かい処理の内容は以降のセクションで説明するとしまして、上図の下段の通りに四則演算という処理内で
表示モード = “結果”
という処理が行われます。

「=」は代入のことですから、ここの処理では何をしているかというと
「結果」という文字を変数「表示モード」に値を代入しています。

「結果」という文字の前後で”結果”と、”(ダブルクォーテーション)で結果という文字を囲っています。”で囲うと結果という文字そのものを表しています。表示モードは”では囲まれていませんので、表示モードは文字そのものではなく、変数を表していることが分かります。

先程に記載した通り、「Public」というのは、システム全体で使用可能な変数です。つまり、ここで「表示モード」という変数に「結果」が代入されたのですが、この値が下図のボタン1処理内でも有効であり、IF文の条件式内で、「表示モード」変数に入っている値で以降の処理を分岐している訳です。

つまり、Excelのシート上で「計算」ボタンを押した時に「表示モード」変数に「結果」が代入されるので、その後に「1」ボタンを押すとIF条件が成立するので、IF文内の
Range(“b3”).Value = “”
が実行されることになります。

cmd1_Click()の上部で定義されている変数では、「Public」とは定義されず次のように定義されています。

Dim ワーク As String
(Public変数で定義したときは、
Public 表示モード As String
と定義しました。)

この場合は、cmd1_Click()内でのみ有効な変数となります。つまり、他のプロシージャには値は引き継がれません。

まとめますと次のようになります。

プロシージャ内で定義された変数
Dim 変数名 As String
は、プロシージャ内でのみ有効な変数となります。

Public(パブリック)として定義された変数
Public変数名As String
は、システム全体で使用できる変数となります。

9)モジュール変数について
その他としては、モジュールレベルの変数というのがあります。

まずはモジュールについて説明をします。下図のVisual Basic エディターの左側の部分でsheet1(sheet1)という部分を選択しています。その際に右側の大きく囲った全体がモジュールになります。右側の小さく囲った部分が各ボタンを押した際の処理、これまでの説明ではcmd1_Click()などが該当します。

つまり、Excelの各シートに対応するのがモジュールであり、モジュール内でそのシートに対する各処理(プロシージャ)を定義していくわけです。また、システム全体は複数のモジュールから成り立っています。

下図の通り、モジュールの一番上でも変数を定義することが出来ます。

ただし、変数の定義の前に ’ (シングルコーテーション)が付けられています。
‘Dim ワーク As String

****************************************************
10)コメント行について
行の前に ’ が付けられるとその行はコメント行になります。コメント行とはそのプログラムに対する補足説明を書いたりする行で、プログラムの処理自身に関係がなくなります。ここではプログラム処理そのものをコメントとしています。

例えば、プログラムに修正を加えたりする中で、以前に記載した処理が必要なくなったりした際に、そのプログラム行を削除すれば良いのですが、完全に消してしまうと元に戻ることができなくなってしまいます。

プログラムの修正作業中は、何度もデバッグを繰り返し行う必要があります。その際に、消してしまったけれど、やっぱり必要な行であったといったことがよくありますから、プログラムの修正作業中はいつでも前の状態に戻れるようにしておくことがベストです。

そのために、一度、記載したプログラム行をコメント行にすることはよく使う方法です。

****************************************************

ここではモジュール変数をコメント化していますが、 ‘ を取るとモジュール変数にすることができます。
Dim ワーク As String

モジュール変数というのは定義されたモジュール内では有効な変数となります。

今回は変数のスコープ(変数の有効な範囲)について説明をしました。


ニコニコチャンネル(月額固定で見放題)
http://ch.nicovideo.jp/ai-light
本記事に関連する動画講座を閲覧できます。一部の動画は無料でも閲覧できます。

YouTubeチャンネル(無料動画配信中)
https://www.youtube.com/user/ailightcom
ITと経営に関する動画を配信しております。
よろしければ、チャンネル登録をお願い致します。

無料から学べる講座
https://www.ai-light.com/itkeiei/
本記事に関連する動画講座をセット販売しております。
その他、ITと経営に関する動画もセット販売しております。

格安ホームページ制作所
https://www.ai-light.com/hp2
インターネットマーケティングに関する記事が無料で閲覧可能です。

株式会社アイライト公式HP
https://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)

ITでお困りのことがございましたら、まずはご相談(コンサルティング)
https://www.ai-light.com/itconsulting.html


弊社は、主に中小企業様向けの業務システム開発ホームページ制作パソコンサポートコンサルティングなど、ITに関する様々なサービスを格安で提供しております。
特に小規模な業務システム開発の分野では、主にAccess(アクセス)を利用した柔軟で効率的な開発を得意としており、関西でダントツの実績があります。

業務システム開発に関しては、以下のような内容で対応しております。
・顧客管理などの単機能なシステムは20万円~50万円が多い。
・受注から入金まで業務全体システムで100万円~350万円ぐらいが多い。
・Access(アクセス)-SQLserverで大規模システム開発は350万円~1500万円が多い。

詳細は、Access(アクセス)、Excel(エクセル)、WEBサイト製作による小規模システム開発のページをご参考ください。

大阪商工会議所からの推薦を受けて、中小企業庁運営の中小企業支援事業に専門家として登録されました。
通称ミラサポ。3回まで無料でのコンサルティングが可能です。ご興味がある方はご連絡ください。
https://www.mirasapo.jp/


(近畿大学にて非常勤講師も務めたバリバリの技術屋が経営する会社)

Access(アクセス)Excel(エクセル)SQL server バーコード Webシステムを使った業務システムのシステム開発の無料相談を受付中

株式会社 アイライト 担当:内藤 響(Naito Ko)
〒550-0005 大阪市西区西本町1丁目5番9号 日清ビル 5F
(四つ橋線 本町駅 24番出口すぐ)
まずは、メール・電話でご相談ください。
TEL : (06) 6599-8890 E-mail : info@ai-light.com
お電話が混んでいる場合が多いので、つながりにくい場合は
TEL : (06) 6535-5117までお願いします。