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

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

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

ら、「ユーザーフォーム」を選択する。

       

  次のようなユーザーフォームが追加される。

         

      「 プ ロ ジ ェ ク ト エ ク ス プ ロ ー ラ に も

「UserForm1」が追加されたことを確認する。

2)フォームの作成とオブジェクト名の変更

今追加されたオブジェクトは、「UserForm1」という名のオブジェクトであったので、プロ グラム中で使用する自分で決めたオブジェクト名に変更する。ここでは、「MyForm」と変更 する。変更は、プロパティウィンドウで行う。Formの名称も変更できるので、プロパティウ ィンドウにあるCaptionをクリックして、「Form」を「フォーム」に変更する。

表示したフォームに下図のようにコントロール(ラベル、コマンド、テキストボックス)を 貼り付ける。

          このユーザーフォームには、3つのラベル、2つのコマンドボタンと1つのテキストボッ クスを貼り付けます。それぞれツールボックスの「A」ボタンなどのボタンをクリックし、

フォーム上の適当な位置でクリック・ドラッグすることで貼り付けます。

     

3)  コントロール(ラベルとコマンド)の変更

貼り付けたコントロール(ラベルとコマンド)のオブジェクト名、キャプション、フォン トを変更します。変更するためには、フォーム上の各コマンド(例えばLabel1)をクリック し(ダブルクッリクするとコードがあらわれてしまうので注意)、各プロバティウィンドウの オブジェクト名、キャプション、フォントをクリックして変更します。変更は、下記のよう に行います。なお、ファンドサイズはすべて18とする。

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

  Label1      lblShowCondition 水の蒸気圧を計算します。

      温度を入力して下さい。

    Label2      lblDegree     ℃ 

    Label3      lblShowVP 蒸気圧は CommandButton1    cmdCalc       計算する CommandButton2    cmdEnd       終了

TextBox1    txtTemperature1    

フォームを表示して、各ボタンを押した場合に動作するようにイベントプロシージャを作 成(プログラムコードの記述)しましょう。コマンドボタン「計算する」をダブルクリック すると、コードウィンドウが表示されるので、下記のコードを記述する。

Private Sub cmdCalc_Click()

Dim T(20) As Single, p10(20) As Single, xlnp As Single Dim A1 As Single, B1 As Single, C1 As Single

' Antoine 定数の読み込み A1 = Cells(3, 2)

B1 = Cells(3, 3) C1 = Cells(3, 4)

'  温度Tの読み込み T(1) = txtTemperature1.Text ' 蒸気圧の計算

xlnp = A1 - B1 / ((T(1) + 273.15) + C1) ' mmHg p10(1) = Exp(xlnp) / 760 * 0.101325 ' MPa

lblShowVP.Caption = "水の" & T(1) & "℃における蒸気圧は" _ & Val(Format(p10(1), "###.######")) & "[MPa]です。"

End Sub

Private Sub cmdEnd_Click() End

End Sub

  コードの記述が終了したら、プロジェクトエクスプローラの中に作成した「MyForm」を 右クリックします。その中から「オブジェクトの表示」を選択することで、作成中のフォー ムが現れます。

これらのコードが実行されると、sheet1 から蒸気圧を計算する際に用いる水の Antoine 定

数 A1、B1,C1を Cells(i,  j)で読み込みます。温度は、テキストボックスtxtTemperature1に入

力される数値をtxtTemperature1.Text で変数T(1)として読み込みます。変数xlnp は、Antoine 式で計算される蒸気圧の対数、変数 p10(1)は、蒸気圧pを表します。まず、フォームのテキ ストボックスtxtTemperature1に数値を入力し、コマンドボタン「計算する」をクリックする と、蒸気圧の計算結果を表示するようなコードとなっています。

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

       

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

Sub ShowUserForm()       MyForm.Show

End Sub

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

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

ワークシートからマクロを起動するボタンの作成するには、前節で作成したオブジェクト

“ShowUserForm”をExcelのsheetから実行するためのボタンを作成します。Exclのsheet1

にもどり、「表示」をクリックし、「ツールバー」の中の「フォーム」を選択する。

     

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

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

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

       

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

   

次にエクセルの sheet にもどり、貼り付けた「ボタン1」をクリックして、表示を適当なも の(ここでは、「蒸気圧の計算」)に書き換えます。エクセルの sheet に貼り付けたこの「ボ タン1」(「蒸気圧の計算」)をクリックすると作成したShowUserFormが起動します。

  動作確認は次のように行います。      完成したsheetとユーザーフォーム

   

ユーザーフォームの自動起動の設定は、前述の通りです。

空白のテキストボックスに数 値(たとえば100)を入力しエ ンターキーで確定した後、こ のボタンをクリックすると、

水の蒸気圧を計算して下に表 示します。

「終了」ボタンをクリックす ると終了し フ ム閉じま

6.2  コンボボックスの使用法

コンボボックスを利用して、別の sheet にあるデータを利用して計算を行う方法について 説明する。

    まず、Excel を起動して、sheet2 の名称を“Antone 定数のデータ”と変更し下記のよう に作成する。この表に記述したデータ(各物質の物質名とそのAntoine定数A、B,C)をsheet1

“メインシート”に作成するコンボボックスを利用して、各物質を呼び出し、sheet1上のユー ザフォームに与えられた温度範囲で、そのコードから蒸気圧を計算します。

   

    sheet1の名称をメインシートと変更し下記のように作成する。

    sheet1のB18の位置に、次の手順でコンボボックスを貼り付ける。まず、下図(左)の ように“表示”をクリックし、“ツールバー”、“フォーム”を選択する。下図(右)のフォー ム(ツールボックス)が現れる。

   

貼り付けた コンボボッ クス

コ ン ボ ボ ッ ク スのボタン

  フォーム(ツールボックス)の中のコンボボックスをクリックする。ポインタが「+」に 変わったことを確認し、コンボボックスを作りたい場所で対角線を引くようにドラッグして 四角形を作る。コンボボックスがsheet上に表示される。

  コンボボックスに表示させたいデータとその結果をどこに表示させるかを次の手順で決定 する。

  まず、コンボボックス上で右クリックし、「コントロールの書式設定」を選ぶ。

 

“コントロールの書式設定”が現れるので、“コントロール”タブをクリックし、上図(右)

のような画面にする。ここで、「入力範囲(I)」には、コンボボックスの元になるデータの範囲

を入力する。「リンクするセル©」には、選んだ結果(元になるデータの上から何番目か)を 表示させるセルを指定する。この場合、直接セルに入力することもできるが、それぞれのボ ックスをクリックし(変数がある場合は Delete キーなどで削除しておく)、それぞれ元にな るデータのセルをドラック、または結果を表示させたいセルをクリックすると自動的にこの 書式設定に書き込まれる。

  この場合、“コントロールの書式決定”のフォームに関して、“入力範囲”の横のテキスト ボックスでは、そこを空にしておいてから、“Antoine定数のデータ”(sheet2を名称変更した もの)のセルB3からB13をクリックアンドドラッグする。さらに、同様の方法を用いて、” リンクするセル“については、”メインシート“(sheet1 を名称変更したもの)のセル A3 を クリックする。”ドロップダウンリストの行数は、8程度でよい。

       

必要事項を記入した後、右下のOKボタンをクリックする。これで、コンボボックスの設 定が完了する。

コンボボックスを利用して、別のシートのデータを取り出したい(抽出)場合、  ここで” リンクするセル“として設定した”メインシート“のセルA3と、“入力範囲”として設定し

た“Antoine定数のデータ”(sheet2を名称変更したもの)のセルB3からB13が重要である。

実際にコンボボックスを使用する場合、コンボボックスの右のボタンをクリックすると、

“入力範囲”として設定した“Antoine 定数のデータ”のセル B3から B13 の文字(水、ク ロロフホルム、メタノールなど)がコンボボックスの下にドロップダウンリストとして表示 されます。この時、使用者が選択したリストの番号が、”リンクするセル“として設定した”

メインシート“のセルA3に表示されます。この番号を用いて、“入力範囲”として設定した

“Antoine 定数のデータ”(sheet2 を名称変更したもの)のシートから、選択されたものに関

する他のデータ(ここでは、その物質のAntoine定数A1,B1,C1の値)をそのシートから抽出 して、メインシートで使用します。

これらの作業を行うには、次のようなプログラムコードの記述します。

ʻ---ーーーーーーーーー ' ComboBox からの物質の決定と

'  sheet2の"Antoine定数のデータ”からの物質名、定数の読み込み '---ーーーーーーーーー

CompNum = Cells(17, 2) ' 蒸気圧を計算する成分数 For k = 1 To CompNum

NoComp(k) = Cells(k + 2, 1)

CompName(k) = Worksheets("Antoine定数のデータ").Cells(2 + NoComp(k), 2) Worksheets("メインシート").Cells(2 + k, 2) = CompName(k)

' Antoine 定数の読み込み

A1(k) = Worksheets("Antoine定数のデータ").Cells(2 + NoComp(k), 3).Value B1(k) = Worksheets("Antoine定数のデータ").Cells(2 + NoComp(k), 4).Value C1(k) = Worksheets("Antoine定数のデータ").Cells(2 + NoComp(k), 5).Value '    sheet1の"メインシート”への物質名、定数の書込み

Worksheets("メインシート").Cells(2 + k, 3) = A1(k) Worksheets("メインシート").Cells(2 + k, 4) = B1(k) Worksheets("メインシート").Cells(2 + k, 5) = C1(k) Next k

このコードでは、 複数のコンボボックスを同時に使用しています。まず、使用するコンボボ ックスの数を、CompNum = Cells(17, 2) として、セルB17から読み込みます。次に、  ”リ ンクするセル“として設定した”メインシート“のセルA3(複数の場合は、セルA4、A5な ども使用)に表示された使用者が選んだリストの番号(例えば、水なら1、フロロホルムな ら2など)を変数 NoComp(k) に次のように代入します。

NoComp(k) = Cells(k + 2, 1)

次に、この変数を利用して、シート"Antoine定数のデータ"に記述された“物質名”を次のコ ードで変数. CompName(k)に代入し、その結果を、“メインシート”のセル  B3に記述するた めに、次のコードを用います。

CompName(k) = Worksheets("Antoine定数のデータ").Cells(2 + NoComp(k), 2) Worksheets("メインシート").Cells(2 + k, 2) = CompName(k)

Antoine 定数の読み込みについても同様に、下記のようなコードを用いて変数、A1(k)、

B1(k)、C1(k)に、シート"Antoine定数のデータ"に記述されたそれぞれの値を代入する。さら

にその変数を利用して、その値を"メインシート"に書込みます。

A1(k) = Worksheets("Antoine定数のデータ").Cells(2 + NoComp(k), 3).Value B1(k) = Worksheets("Antoine定数のデータ").Cells(2 + NoComp(k), 4).Value C1(k) = Worksheets("Antoine定数のデータ").Cells(2 + NoComp(k), 5).Value

関連したドキュメント