• 検索結果がありません。

Excel と VBA を用いた対話型プログラム

   

  ExcelとVBAを利用した対話型プログラムの作成方法について解説する。

複数のユーザーフォームの利用   1)プログラムの画面の順序

ExcelとVBAを利用した対話型プログラムとして、次のような画面からなる「適性判断」

プログラムを作成します。

 

                 

      第1画面      第2画面

  「はい」の      「いいえ」

場合の質問      場合の質問

       

         

      答1      答3    

      答2      答4

  このような順序で画面が表示されます。このプログラムは、複数のユーザーファームを作 成して、そのフォームの表示を切替えているだけなので、主に“オブジェクト名.Show”と

“Unload Me” の二つのコマンドで作成できます。

2)フォームの作成

  まず、前節と同様に第1画面のユーザーフォームを作成してみよう。前節で作成したExcel プログラム“Show_DateTime_01.xls” のフォームとコードがそのまま利用できるので、Excel プログラム“Show_DateTime_01.xls”を起動して、名前を”Show_Select_01.xls”と変更して保存 します。

次に、下図のようにメニューバーから「ツール」を選び、「マクロ」、「Visual Basic Editor」 をポイントして選択する。

     

下図のようなVisual Basic Editorのウィンドウが表示されるので、プロジェクトエクスプロー ラの中の“フォーム”フォルダーを開けて、“MyForm”を右クリックする。

     

      VBエディター      プロジェクトエクスプローラ

  上図(右)のような画面が現れるので、“MyForm”の”オブジェクトの表示”をクリックし て、次のような“MyForm”のフォームを呼び出す。コントロールの貼り付け方は、前章と同 様に、ツールボックスを利用します。この場合は、コマンドボタンを貼り付けます。

   

      フォーム作成

  コマンドボタンを貼り付けたら、そのプロバティをプロパティウィンドウにより書き換え ます。

貼り付けたコントロール(ラベルとコマンド)のオブジェクト名、キャプション、フォン トを変更します。変更するためには、フォーム上のコマンドボタンをクリックし(ダブルク ッリクするとコードがあらわれてしまうので注意)、プロバティウィンドウのオブジェクト名、

キャプション、フォントをクリックして変更します。オブジェクト名=”cmdSelect”, キャプ ション=“適性診断”、フォントサイズは18とする。

      オブジェクト名     キャプション CommandButon1    cmdSelect       適性診断

  次に、VB エディターのコマンドバーから“挿入”をクリックし、ユーザーフォームを選 択して新たなユーザーフォームを作成します。

   

  プロジェクトエクスプローラにおいて、“フォーム”フォルダーの”MyForm”の下に、新た

に”UserForm1”が作られていることを確認する。他のフォームも同様に作成できる。フォーム

やコードは編集機能でコピーして利用できるので、この”UserForm1”を記述して、それをコピ ーする手順を次に示す。

  ツールボックスを用いて、下図のように1つのラベル(Labl1)と3つのコマンドボタンを

貼 り 付 け る 。 そ れ ぞ れ ”UserForm1, Label1, CommandButton1, CommandButton2,

CommandButton3“のオブジェクト名、キャプション、フォントをプロバティウィンドウから

修正する。

     

      オブジェクト名     キャプション UserForm1        Question1Form      Question1Form       

Label1      lblQuestion        コンピュータは好きですか?

CommandButton1      cmdYes      はい CommandButton2      cmdNo      いいえ CommandButton3      cmdReturn        戻る

プロジェクトエクスプローラにおいて、“フォーム”フォルダーの”MyForm”の下に、

Question1Formが作されていることを確認する。

  次に再びVBエディターのコマンドバーから“挿入”をクリックし、ユーザーフォームを 選択し、新たなユーザーフォームを作成し、Question2Formとします。

   

  Question2FormはQuestion1Formをコピーして作る。プロジェクトエクスプローラにおいて、

Question1Form を右クリックし、“オブジェクトの表示”を選択します。これにより、

Question1Form のフォームが表示されます。Question1Form のフォームの一部をクリックし、

Ctrl+A を入力する。Question1Formのフォームが下図のようになることを確認し、

Ctrl+C  によりコピーします。

       

プロジェクトエクスプローラにおいて、Question2Form を右クリックし、“オブジェクトの 表示”を選択し、Question2Formのフォームを表示します。Question2Formのフォームをクリ

ックし、Ctrl+V  によりコピーを貼り付けます。コマンドバーの編集のコピー、貼り付けを

使用しても同様です。

Question2Form のフォームを1度クリックして、Ctrl+A を解除します。その後、それぞれ

UserForm1、コマンドなどのオブジェクト名、キャプションをプロバティウィンドウから修

正する。

      オブジェクト名     キャプション

UserForm1        Question2Form        Question2Form        LblQuestion1      lblQuestion2      科学は好きですか?

CmdYes      cmdYes      はい CmdNo      cmdNo      いいえ CmdReturn        cmdReturn      戻る

  このコピーと貼り付けの操作は、コードについても同様に利用できるので、Question1Form のコードを作成し、それを他のフォームにコピーして貼り付けます。

他のフォームも同様の方法にて作成します。

コードの作成は、前章と同様に行います。作成するコードを以下に示す。

3)コードの入力

  コードの記述が終了したら、先ほどと同様に、プロジェクトエクスプローラの中に作成し

た「MyForm」を右クリックします。その中から「オブジェクトの表示」を選択することで、

作成中のフォームが現れます。次に「終了」ボタンとクリックし、先ほどと同様に下記のコ ードを記述します。

Private Sub cmdEnd_Click()       End

End Sub

さらに、同様にして「閉じる」ボタンに対しても、下記のコードを記述する。

Private Sub cmdClose_Click()       Unload MyForm

End Sub

  このようにして記述したコードはそれぞれのイベントを実行します。

lblDate.Caption = Date lblTime.Caption = Time

これらのコードが実行されると、フォームのlblDate  と lblTimeの貼り付けた位置にその時 の、日付と時刻が表示されます。  End  では終了し、Unload MyForm  では、そのFormを 閉じます。これは、Unload me と記述しても同じ動作(イベント)になります。

4)ユーザーフォームを表示するマクロの作成

  ユーザーフォームを表示するためのマクロを作成するには、まず、下図のようにVBエデ ィターの「挿入」をクリックし、「標準モジュール」を選択する。

       

  下記のコードを入力します。

Sub ShowUserForm()       MyForm.Show

End Sub

  ここで作成したオブジェクト“ShowUserForm”を Excelの sheetから実行するためには、

Excelのsheet上にこのオブジェクトを呼び出すボタンを貼り付けなければなりません。

5)ワークシートからマクロを起動するボタンの作成

  ワークシート上には、マクロを実行するためのボタンを作成することができます。ここで は、前節で作成したオブジェクト“ShowUserForm”をExcelの sheetから実行するためのボ タンを作成します。

  まず、Exclのsheet1にもどり、「表示」をクリックし、「ツールバー」の中の「フォーム」

を選択する。

     

「表示」、「ツールバー」の中の「フォーム」を選択すると、下図のようなファームが sheet 上に現れます。

  そこで、この中のボタンをクリックし、ボタンを貼り付ける位置で再度クリックし、

そのままドラッグすることで、ボタンを大きさと位置を決めると、下図のようなボタン1が 表示され、同時に次に示す「マクロの登録」のウィンドウが現れます。

       

「マクロの登録」のウィンドウでは、まず、マクロ名でボックスに表示された使用したいマ クロ(ここでは、前節で作成したShowUserForm)を選択し、OKボタンをクリックする。

   

次にエクセルの sheet にもどり、貼り付けた「ボタン1」をクリックして、表示を適当なも の(ここでは、「日付と時刻の表示」)に書き換えます。エクセルの sheet に貼り付けたこの

「ボタン1」(「日付と時刻の表示」)をクリックすると作成したShowUserFormが起動します。

6)動作確認      完成したsheetとユーザーフォーム

   

このボタンをクリックすると 日付と時刻を示すユーザー フォームがあらわれる。

「確認」ボタンで日付と時刻 が表示される。「終了」「閉じ る」

7)  ユーザーフォームの自動起動

  今のままでも、sheet上のボタンからユーザーフォームを起動できますが、Excel の起動時 に ユ ー ザ ー フ ォ ー ム を sheet 上 に 表 示 す る に は ど う し た ら よ い の で し ょ う か 。Sub 

WorkBook_Openイベントを利用する方法があります。まず、下図のようにVBエディターの

プロジェクト・ウイザードの中から「ThisWorkbook」を右クリックし、「コードの表示」を選 択する。

   

  下図のように(General)が表示されますが、下ボタンを押して、Workbook をクリックし

て、Sub  Workbook_Open()のSubプロシージャのコードが現れる。

ここで、End  Subの間に、  「MyForm.show」と入力して、コードを完成させる。

   

  このままでも、Excel の起動時にユーザーフォームを sheet 上に表示することはできるが、

ユーザーフォームが表示されている間は、Excel 上の操作はできません。そこで、ユーザー フォームを表示している間も Excel 上の操作を行いたい場合、次のように「vbModeless」と 指定します。

Private Sub Workbook_Open()     MyForm.Show vbModeless

End Sub

6. Excel から VBA 操作に関する解説(テキスト・コンボボック

関連したドキュメント