Tip:
Highlight text to annotate it
X
【動学.tv】Excel VBA コントロールの使い方
第三章では、フォームに配置する コントロールの使い方を紹介します
テキストボックスにセルのデータを表示する為の コードを追加します
追加する場所は、フォームの Initializeイベントプロシージャの中です
二行目のデータを表示する場合のコードは このようになります
テキストボックスにデータを表示するには、 テキストボックスのバリュープロパティを設定します
そのテキストプロパティには、Cellsプロパティを使って、 セル内の文字列を設定します
ComboBoxも、同じ形式になります
では、次へ移動ボタンが押された時のコードは、 どのように記述すれば良いか考えてみます
Cellsプロパティに注目して考えて行きましょう
次へ移動ボタンを押していくと、Cellsプロパティの引数の内 行番号が一つずつ増えなければなりません
逆に、前へ移動ボタンをクリックした場合は、 行番号がマイナス1される必要があります
このようにフォームが開いた時と、 移動ボタンがクリックされた時は、 Cellsプロパティの値が変化するだけで 共通の処理を行っているのが分かります
そこで共通で使用するプロシージャを作成して、 Cellsプロパティの行番号は変数'i'に置き換えます
それぞれのイベントプロシージャからは、 コールステートメントを使用して プロシージャを呼びだすようにします
その際には変数'i'の値を変化させます
フォームを表示する時は、iを2に設定し
前へ移動ボタンがクリックされた時は、iを-1
次へ移動ボタンがクリックされた時は、iを+1します
まずは変数'i'を宣言します
コードウィンドウの一番上に、このように入力して下さい
今まで変数を宣言する時はdimを使用していました
しかしここではPrivateにします
これらの違いは変数を使用できる適用範囲です
Private変数はモジュール内のすべてのプロシージャで、 使用できるようになります
共通で使用するプロシージャを挿入します
挿入メニューからプロシージャを選択しましょう
プロシージャの追加ダイアログが開きました
名前をDisplayにしてOKボタンをクリックします
コードウィンドウにDisplayという名前のプロシージャが 追加されました
プロシージャの上に'データ表示とコメントを付けます
ディスプレイプロシージャの中には このようにコードを記述して下さい
コードの入力例はこのようになります
後はこのプロシージャを呼び出すようにします
Initializeイベントのプロシージャの中に callに続いてDisplayと入力します
そしてその前の行に行番号を指定する変数iに 2を代入します
コマンドボタンのクリックイベントにも、 同じようにcallステートメントを入力しましょう
そして前へ移動のプロシージャには、 変数iが-1されるように'i = i-1'と入力します
次へ移動ボタンのプロシージャには、 変数iが+1されるように'i = i+1'と入力します
これでコードが完成したので動作を確認してみましょう
Excelに画面を切り替え、ファイルメニューで 上書き保存してから閉じるを選択します
ファイルメニューから開くを選択して 社員名簿.xlsをダブルクリックしましょう
セキュリティ警告ダイアログでマクロを有効にするを クリックするとフォームが開きます
フォームには自動的にシートの2行目のデータが 表示されています
次へ移動ボタンをクリックしていくと3行目のデータ、 4行目のデータがフォームに表示されます
前へ移動ボタンをクリックしていくと、3行目、2行目と 前のデータに戻ります
予定通り機能しているようですが、 一つ問題が残っています
もう一度前へ移動ボタンをクリックすると 項目名が表示されてしまいます これは必要ありませんよね
さらにもう一度クリックするとエラーが発生してしまいます
これはセルの存在しない1行目より前に 移動しようとした為です
エラーダイアログの終了ボタンをクリックしましょう
マクロを停止する事ができました
コードウィンドウに切り替え、前へ移動の イベントプロシージャの行動を修正します
プロシージャの先頭にIfステートメントを使用して このように記述して下さい
これは変数'i'が2つまり2行目の場合は "前に戻れません"とメッセージを表示して プロシージャを終了するという意味です
では、再び動作を確認してみましょう
ブックを開き直します
フォームが表示されると2行目のデータが 表示されているので前へ移動ボタンをクリックします
すると、前に戻れませんというメッセージが表示されます
OKボタンをクリックするとフォームには2行目のデータが そのまま表示されエラーは発生しなくなりました
続いては、フォームのテキストボックスに入力したデータを ワークシートに登録できるようにします
今は表示されているデータを削除して入力し直しても ワークシートには反映されません
登録の処理はフォームに配置した登録ボタンが クリックされた時に実行されるようにします
フォームは閉じておきましょう
画面をVBEに切り替えて下さい
プロジェクトエクスプローラでUserForm1を選択して オブジェクトの表示ボタンをクリックします
デザインウィンドウにフォームが表示されます
まずは登録ボタンがクリックされた時の イベントプロシージャを作成しましょう
登録ボタンをダブルクリックして下さい
コードウィンドウに切り替わりCommandButton1の クリックイベントプロシージャが作成されました
テキストボックスの内容をセルに登録するには、 セルのデータをテキストボックスに表示した時と 逆の事を行います
これは、先程ディスプレイプロシージャに 記述したコードです
セルのValueプロパティで取得したデータを テキストボックスのValueプロパティに設定する命令でした
このコードのイコールの左辺と右辺を入れ替えると セルにテキストボックスのデータを登録する事ができます
ComboBoxも同じです
コードの入力例はこのようになります
では、動作を確認しましょう
Excelに画面を切り替え、ブックを開き直して下さい
マクロを有効にしてフォームを表示します
表には、社員コード014番まで登録されているので、 この続きで社員番号015番のデータを フォームから登録します
テキストボックスが空欄になるまで、次へ移動ボタンを クリックしていきます
テキストボックスが空欄になったら、社員コード、氏名、 所属部署、電話番号、住所を入力していきます
入力が完了したら登録ボタンをクリックします
表の一番下に社員番号015の新しいデータが 登録されました
これで登録の機能は完成です
但し、コンボボックスがまだ完成していません
右側の下向き三角ボタンをクリックしたら 選択肢が表示されなければなりません しかし、まだ何も表示されていませんね
フォームを閉じてコンボボックスの設定をしていきましょう
ツールメニューのマクロから Visual Basic Editorを選択します
プロジェクトエクスプローラからUserForm1を選択して コードの表示ボタンをクリックしましょう
コンボボックスの設定は、フォームが開いた時に 行うようにします
従って、UserFormのInitializeイベントの中に コードを追加します
コンボボックスのオブジェクト名はComboBox1です
コンボボックスにリストを追加するには、 AddItemメソッドを使用して画面のように記述します
AddItemメソッドの引数にはリストに 追加する文字を指定します
このコードが実行されるとリストの1行目の候補に 経理課が追加されます
同じように人事課、営業1課、営業2課を AddItemメソッドで追加するようにします
入力が終わればコードは完成です
プロパティの設定を行うのでオブジェクトを表示しましょう
コンボボックスを選択します
プロパティウィンドウでStyleプロパティを選択します デフォルトではfmStyleDropDownComboが 設定されています
リストを表示して設定をfmStyleDropDownListに 変更しましょう
どちらの設定でも見た目に違いはありません
元々設定されていたfmStyleDropDownComboは テキストボックスと同じように ボックスに入力する事ができます
それに対してfmStyleDropDownListは 入力する事はできず、 リストからの選択しかできない設定です
では、動作を確認する為にExcelに画面を切り替え ブックを開き直して下さい
マクロを有効にしてフォームを表示します
コンボボックス右側の下向き三角ボタンをクリックします
するとAddItemメソッドで登録したものが リストに表示されます
また、キーボードからの入力が 出来ないようになっているのを確認して下さい
選択肢が限られている項目に関しては このような形にするとメリットがあります
入力の手間が省けるのと同時にミスを防ぐ事ができます
サンプルファイルはこれで完成となります 保存して閉じて置いて下さい