HOME > 即効テクニック > Excel VBA > ユーザーフォーム関連のテクニック > ユーザーフォーム入門 - 住所入力フォームを作成する(4) 〜 起動時に住所録ファイルを開く

ユーザーフォーム入門 - 住所入力フォームを作成する(4) 〜 起動時に住所録ファイルを開く|Excel VBA

ユーザーフォーム関連のテクニック

ユーザーフォーム入門 - 住所入力フォームを作成する(4) 〜 起動時に住所録ファイルを開く

(Excel 2000/2002/2003/2007/2010/2013/2016)

ユーザーフォーム入門 - 住所入力フォームを作成する(3) 〜 入力順序とIMEの設定」に続き、ユーザーフォームの処理を作成していきます。

■フォームモジュールを表示

ユーザーフォームの起動時に、住所録となる専用ブックを開く処理を作成しましょう。
まず、ユーザーフォームに関する処理を記述するための "フォームモジュール" を用意します。

  1. VBEのプロジェクトエクスプローラで、[myForm]を右クリック→[コードの表示]を選択して、フォームモジュールを表示する
  2. コードウィンドウ上部の左側にある "オブジェクトボックス"(初期状態:"General"の表示)から "UserForm" を選択する
  3. 上部右側の "プロシージャボックス" から "Initialize" を選択する
  4. フォームモジュールに以下のプロシージャのひな形が挿入される
    Private Sub UserForm_Click()
    
    End Sub
    
    Private Sub UserForm_Initialize()
    
    End Sub

■フォーム初期化時のイベントプロシージャを作成

イベントプロシージャは、"どのオブジェクトに" "どのイベントが発生" したら実行するか、その組み合せでプロシージャを用意します。
上記のステップ4で挿入された「UserForm_Click」はユーザーフォームクリック時、「UserForm_Initialize」はユーザーフォーム初期化時に実行されるイベントプロシージャです。
ここでは、1つ目の「UserForm_Click」プロシージャは不要なので削除し、ユーザーフォーム初期化時の処理を作成します。

  1. UserForm_Clickイベントプロシージャを削除する
  2. モジュールレベルの定数を宣言する
    モジュールレベルの変数や定数は、"宣言セクション" に記述します。
    宣言セクションは、モジュールの先頭から1つめのプロシージャまでの領域です。
    「Private Sub UserForm_Initialize()」の上に次のコードを記述してください。
  3. UserForm_Initializeイベントプロシージャを作成する
    ユーザーフォーム初期化時の処理を以下のとおり作成します。
    このプロシージャでは、最初に住所録が既に開いているかどうかをチェックし、開いていれば、プロシージャを終了します。
    開いていない場合は、ユーザーフォームを含むブックと同じフォルダ内に "住所録.xlsx" があるかどうかをチェックし、あればそれを開きます。
    なければブックを新規作成し、"住所録.xlsx" の名前で保存します。
    各処理の詳細は、コード内のコメントを参照してください。
Option Explicit

'出力用の住所録ファイルのファイル名
Private Const BOOK_NAME As String = "住所録.xlsx"


'フォーム初期化時のイベント
Private Sub UserForm_Initialize()
    Dim strPath As String
    Dim Ret As String
    Dim wbAddress As Workbook
    
    '住所録ファイルが既に開いていたら変数に格納してプロシージャを抜ける
    '開いていない場合に備えてエラー処理
    On Error Resume Next
        Set wbAddress = Workbooks(BOOK_NAME)
        If Err.Number = 0 Then Exit Sub
    On Error GoTo 0
    
    
    '住所録ファイルのフルパスを取得
    strPath = ThisWorkbook.Path & "\" & BOOK_NAME
    
    'Dir関数でファイル存在確認
    '(戻り値:存在→"ファイル名"、存在しない→長さ0の文字列)
    Ret = Dir(strPath)
    

    '住所録ファイルが存在しない場合
    If Ret = "" Then
        'ブックを新規作成し、1つ目のシートに項目名を設定
        Set wbAddress = Workbooks.Add
        wbAddress.Sheets(1).Range("A1:I1").Value = _
            Array("会社名", "よみ", "郵便番号", "住所1", "住所2", _
                   "TEL", "FAX", "Email", "担当")
                   
        'すべてのセルの表示形式を文字列にする
        wbAddress.Sheets(1).Cells.NumberFormatLocal = "@"
        
        'いったん保存する
        wbAddress.SaveAs strPath
        
    '住所録ファイルが存在する場合
    Else
        'ブックを開く
        Set wbAddress = Workbooks.Open(strPath)
    End If
End Sub

ここまでできたら、[F5]キーで実行してみましょう。

ユーザーフォームとともに、項目名が入力されたブックが表示され、同じフォルダ内に "住所録.xlsx" ファイルが保存されます。
確認できたら、ユーザーフォームは右上の[×]ボタンで閉じ、"住所録.xlsx"も閉じてください。

次回は、ユーザーフォームに入力したデータを専用ブック "住所録.xlsx" に転記する処理を作成していきましょう。