<<目次へ


ユーザーフォームを使ってみよう


  1. コントロールの機能
  2. テキストボックスに入力された値を取得する
  3. チェックボックスとオプションボタンの使い方
    1. チェックボックス
    2. オプションボタン
  4. RefEditの使い方


コントロールの機能

 少なくともデータ分析のためのプログラムを作るうえでは上の図において丸で囲まれている6個の機能を把握しておけば大丈夫だと思われます。それぞれの名称はマウスのカーソルを合わせれば表示されるので確認してみてください。
 以下,それぞれについての簡単な機能を紹介しますが,実際に例を真似てみたほうが分かり易いのでとりあえず「こんなことができるのか」という感じで受け取っておいてください。

@ラベル
 これは説明などを書くためのもので,特に使い方などはありません。
Aテキストボックス
 ユーザーフォーム上で数値データ,文字,セル(またはセル範囲)を入力するために使います。
Bチェックボックスとオプションボタン
 チェックボックスもオプションボタンも基本的な機能は同じです。ただしチェックボックスの場合は1つのユーザーフォーム上でいくつチェックしても良いのですが,オプションボタンの場合は1つしかチェックができません。
Cコマンドボタン
 コードエディタに記述したプログラムを実行させるためのものです。
DRefEdit
 ワークシート上のセル(またはセル範囲)のアドレスを取得するために使います。



テキストボックスに入力された値を取得する

使用するコントロール:ラベル,テキストボックス,コマンドボタン

手順1.まずは以下のようにユーザーフォームを作成してください。

手順2.ユーザーフォームを終了させるためのマクロを[終了]ボタンに登録します。

 [終了]ボタンをダブルクリックするとコードウィンドウが現れるので次のようにコードを記述してください。

Private Sub CommandButton2_Click()
  
Unload UserForm1
End Sub

 コードの記述が終わったら1度コードウィンドウを閉じて,ユーザーフォームを実行させてみてください。そのときに[終了]ボタンをクリックするとユーザーフォームが終了するはずですので確認してみてください。

手順3.テキストボックスに入力された値を取得するためのプログラムを作成し,[実行]ボタンをクリックするとそのプログラムが実行されるようにします。

 手順2と同じく,[実行]ボタンをダブルクリックするとコードウィンドウが開きますので,そこに以下のようなコードを記述してください。

Private Sub CommandButton1_Click()
    Dim num As Integer
    Dim hani As String
    'TextBox1に対する処理
    If TextBox1.Value = "" Then
        MsgBox "テキストボックスに値が入力されていません"
        Exit Sub
    Else
        num = TextBox1.Value
    End If
    MsgBox "テキストボックスに入力された値は" & num & "です"
    'TextBox2に対する処理
    If TextBox2.Text = "" Then
        MsgBox "テキストボックスにセルまたはセル範囲が入力されていません"
        Exit Sub
    Else
        hani = TextBox2.Text
    End If
    MsgBox "テキストボックスに入力されたセルまたはセル範囲は" & hani & "です"
    Range(hani).Select
End Sub

コードの解説

'TextBox1に対する処理

 もしテキストボックスに値が入力されていない場合はメッセージボックスに「テキストボックスに値が入力されていません」と表示し,プロシージャを終了します。テキストボックスに値が入力されていた場合はその値をnumに代入し,メッセージボックスでその値を表示させます。

'TextBox2に対する処理

 もしテキストボックスにセル範囲が入力されていない場合はメッセージボックスで警告を表示してプロシージャを終了させます。セル範囲が入力されていた場合はhaniにセル範囲を代入し,それをメッセージボックスで表示した後,入力したセル範囲を選択します。



チェックボックスとオプションボタンの使い方

1.チェックボックスの使い方

使用するコントロール:ラベル,テキストボックス,チェックボックス,コマンドボタン

 とりあえず次のようなユーザーフォームを作成します。

 前回と同じように[終了]ボタンをダブルクリックしてコードウィンドウを開き,以下のようにコードを記述しましょう。ただし今度はUserForm2であることに注意してください。

Private Sub CommandButton2_Click()
  
Unload UserForm2
End Sub

 さらに[実行]ボタンをダブルクリックしてコードウィンドウを開きます。そして以下のようなコードを記述してください。

Private Sub CommandButton1_Click()
    Dim num1 As Double, num2 As Double, sum As Double
    'テキストボックスの値を取得
    If TextBox1.Value = "" Then
        MsgBox "値が入力されていません"
        Exit Sub
    ElseIf TextBox2.Value = "" Then
        MsgBox "値が入力されていません"
        Exit Sub
    End If
    num1 = TextBox1.Value
    num2 = TextBox2.Value
    'チェックボックスにチェックが入っている場合の処理
    num1 = IIf(CheckBox1.Value = True, num1 ^ 2, num1)
    num2 = IIf(CheckBox2.Value = True, num2 ^ 2, num2)
    sum = num1 + num2
    MsgBox sum
    Range("A1").Value = IIf(CheckBox3.Value = True, sum, "")
End Sub

コードの解説

'チェックボックスにチェックが入っている場合の処理

 チェックボックスを使用する際にはIIf()関数を使用します。上の例で説明すると、、、

num1 = IIf(CheckBox1.Value = True, num1 ^ 2, num1)

 チェックボックスにチェックが入っていたらnum1を2乗した値をnum1に代入,そうでなければnum1に代入されている値をそのまま代入する。
 つまり,現在num1という変数にはテキストボックスに入力した値(例えば2)が代入されているわけですから,チェックボックスにチェックが入っている場合は2^2=4という値がnum1という変数に代入され直すわけです。チェックが入っていない場合はそのままnum1に代入されている値(つまり2)が代入されるわけですから,num1に代入されている値は最初のままということになります。

Range("A1").Value = IIf(CheckBox3.Value = True, sum, "")

 チェックボックス3にチェックが入っていた場合はセルA1に計算結果が出力されます。そうでない場合は空白が出力されます(つまりなにも出力されない)。

 また,次のオプションボタンの使い方で紹介するようにIIf()関数を使用しなくても,If〜Thenステートメントを使用しても同じようなことができます。


2.オプションボタンの使い方

使用するコントロール:ラベル,テキストボックス,オプションボタン,コマンドボタン

 今度は次のようなユーザーフォームを作成してください。

 [終了]ボタンについては前回までと同様なので説明は省きます(今度はUserForm3であることに注意してください)。[計算]ボタンをダブルクリックし,以下のコードを記述します。

Private Sub CommandButton1_Click()
    Dim num1 As Double, num2 As Double, result As Double
    
    If TextBox1.Value = "" Then
        Exit Sub
    ElseIf TextBox2.Value = "" Then
        Exit Sub
    End If
    
    num1 = TextBox1.Value
    num2 = TextBox2.Value
    
    If OptionButton1.Value = True Then
        result = num1 + num2
    ElseIf OptionButton2.Value = True Then
        result = num1 - num2
    ElseIf OptionButton3.Value = True Then
        result = num1 * num2
    ElseIf OptionButton4.Value = True Then
        result = num1 / num2
    Else
        MsgBox "どれか選択してください"
    End If
    
    MsgBox result
End Sub

コードの解説

 要はオプションボタンにチェックが入っていた場合に足し算なり掛け算なりの値をresultという変数に代入させるわけです。特に難しいことはないので問題ないと思いますが,上で紹介したようなIIf()関数を使ってもできますし,場合によって(オプションボタンの数が多いときなど)はSelect〜Caseステートメントを使用するのも良いかもしれません。



RefEditの使い方

 RefEditとはコントロールの1番左下にあるやつです。これはどういう機能を持っているかというと単一セルあるいはセル範囲のアドレスを取得するというものですが,言葉で説明してもイマイチわかりにくいでしょうから実際にやってみましょう。

 まずRefEditを使用する前に次のようなユーザーフォームを作成してください。これはテキストボックスに入力したセル範囲を選択するというだけのものですが、これではワークシートのデータが入力されている範囲を自分で見て,それを入力するのではメンドクサイです。

[セルを選択ボタンに記述するコード]

Private Sub CommandButton1_Click()
    Dim hani As String
    hani = TextBox1.Text
    Range(hani).Select
End Sub

[終了ボタンに記述するコード]

Private Sub CommandButton2_Click()
    Unload UserForm4
End Sub


 そこでRefEditを使用すればこんなことができてしまいます。以下のようなコードを記述して実行させてみてください。これを応用すればデータ分析のためのプログラムを作成する際にとても操作しやすいものを作れるようになるでしょう。

[セルを選択ボタンに記述するコード]

Private Sub CommandButton1_Click()
    Dim hani As String
    hani = RefEdit1.Text
    Range(hani).Select
End Sub

[終了ボタンに記述するコード]

Private Sub CommandButton2_Click()
    Unload UserForm5
End Sub


[補足:Application.InputBoxを使用する場合と同じようにするには、、、]

Sub sample()
    Dim Myrange As Range
    Set Myrange = Application.InputBox("データ範囲を入力して下さい", Type:=8)
    Myrange.Select
End Sub

Private Sub CommandButton1_Click()
    Dim hani As String
    Dim Myrange As Range
    hani = RefEdit1.Text
    Set Myrange = Application.Range(hani)
    Myrange.Select
End Sub