特集
» 2015年08月19日 10時00分 公開

これは使える! 設計現場のExcel:いつもの設計シートをアプリに簡単変身! はめ合い公差表検索シートを作ろう (3/4)

[伊藤孝宏,MONOist]

 次に、作成したユーザーフォームの上に必要な部品を配置していきます。ツールボックス最上段の右端のコンボボックスアイコンをクリックして、ユーザーフォーム左上に配置してください。同じく、最上段の左から2番目、Aと表示されたラベルアイコンをクリックして、図8を参考に配置してください。

図8:部品の配置

 デフォルトでは小さな文字が表示されるので、コンボボックスもラベルもプロパティのFont欄右の「…」をクリックして、表示されるウィンドウでフォントサイズを12程度に設定してください。

 必要な部品を配置したら、次はコードを記述していきます。

 今回は多少込み入っているので、図9で概略を説明してからコードの説明をします。

図9:動作の概略

 始めにコンボボックスに項目を設定します。次に、ユーザーフォーム内を巡回し、「軸公差のコンボボックスが変更されたら」「穴公差のコンボボックスが変更されたら」「寸法入力ボックスの値が確定したら」の3つの条件で動作を指定します。この場合、軸公差の処理についてはモジュール「shaft」として、穴公差の処理についてはモジュール「hole」として、コードを記述し、各条件での動作については、shaft、holeとして呼び出します。

 コンボボックスの項目設定は下記のようになります。

Private Sub UserForm_Initialize()
ComboBox1.List = Sheet1.Range("as1:as20").Value
ComboBox2.List = Sheet1.Range("as22:as41").Value
End Sub

 軸公差のコンボボックスが変更された場合、穴公差のコンボボックスが変更された場合のコードは下記のようになります。

Private Sub ComboBox1_Change()
shaft
End Sub
Private Sub ComboBox2_Change()
hole
End Sub

 寸法入力ボックスの値が確定した場合のコードは下記となります。「_Exit 」とはオブジェクト(この場合、入力ボックス)での作業が終了した場合に動作するコマンドになります。コンボボックスは選択されていない場合、-1を返すので、コンボボックスのインデックスが0以上であるかで、コンボボックスが選択しているかを判断しています。

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If ComboBox1.ListIndex >= 0 Then
    shaft
Else
    Label1.Caption = ""
    Label2.Caption = ""
    Label5.Caption = ""
End If
If ComboBox2.ListIndex >= 0 Then
    hole
Else
    Label3.Caption = ""
    Label4.Caption = ""
    Label6.Caption = ""
End If
End Sub

 軸公差の処理のコードは下記となります。テキストボックスに入力された値が公差表の範囲にあるかどうかをifコマンドで判断し、表の範囲内にある場合のみシートに値をコピーし、結果をユーザーフォームのラベルに反映させます。

Sub shaft()
If IsNumeric(TextBox1.Text) = True And Val(TextBox1.Text) > 0.000001 And Val(TextBox1.Text) <= 500 Then
    Sheet1.Cells(2, 1) = TextBox1.Text
    Sheet1.Cells(2, 3) = Sheet1.Cells(ComboBox1.ListIndex + 1, 45)
    Label1.Caption = Sheet1.Cells(2, 4) & "[μm]"
    Label2.Caption = Sheet1.Cells(2, 5) & "[μm]"
    Label5.Caption = Sheet1.Cells(2, 7)
End If
End Sub

 穴公差の処理のコードは同様に下記となります。

Sub hole()
If IsNumeric(TextBox1.Text) = True And Val(TextBox1.Text) > 0.000001 And Val(TextBox1.Text) <= 500 Then
    Sheet1.Cells(2, 1) = TextBox1.Text
    Sheet1.Cells(3, 3) = Sheet1.Cells(ComboBox2.ListIndex + 22, 45)
    Label3.Caption = Sheet1.Cells(3, 4) & "[μm]"
    Label4.Caption = Sheet1.Cells(3, 5) & "[μm]"
    Label6.Caption = Sheet1.Cells(3, 7)
End If
End Sub

 ここまでできたら、動作の確認をしてみてください。動作は、VBAエディタのツールバーで横向き三角アイコンをクリックするか、「実行」→「Subユーザーフォームの実行」、あるいはF5キーを押してください。

 ここまで入力したシートはこちらからダウンロードできます。

Sample4.xls

 無事、動作したら、次に、ファイルを開くと自動でウィンドウが開き、しかもシートが非表示となるようにしてみます。ウィンドウだけが表示されるようになり、見た目も良くなります。その前に、VBAエディタに戻るために、ユーザーフォームを閉じてください。

Copyright © ITmedia, Inc. All Rights Reserved.