【VBAユーザーフォーム応用】メンバーカードや社員、生徒の管理をタブストリップで簡単に

動画でExcel タブストリップの使い方応用編
実務でタブストリップを使う
動画版「ユーザーフォーム講座の応用編1回」です。
このページでは、基礎編のタブストリップをご覧いただいた後、どのように実務で使っていくのかという、実践的なコードを紹介しています。
●タイムライン
動画のチャプター- 00:00 - イントロ
- 00:29 - 内容紹介、タブストリップを使用した実用的なコード内容とは何か。
- 01:01 - 基礎編13回との違い
- 02:26 - 第1段階としての実用へのステップ、イニシャライズの利用
- 03:40 - 第2段階として発展レベル、タブ登録の自動化、データの登録と削除
- 04:36 - 第1段階としての実用へのステップのコード解説 UserForm_Initialize()
- 06:10 - タブストリップの初期値の設定
- 09:00 - タブストリップのタブを切り替えた時にデータを表示するコード
- 11:28 - 第1段階の発展レベルのコードまとめ
- 12:32 - 第2段階の発展レベルのコード、UserForm_Initialize()でタブを自動的に読み込む
- 14:50 - タブストリップのタブチェンジとデータを表示するコード
- 18:00 - 新規入力データを登録するためのコード
- 20:00 - 不要データを削除するためのコード
- 23:03 - まとめと次回予告
- 23:36 - コードタイム
- 26:23 - End
マクロ動画 社員、生徒、メンバーの管理をするユーザーフォーム
Tab Stripを実務で使えるレベルまで
基礎編でご紹介したTab Stripを起動したのがこちらです。
社員は現在5名です。

Tabに表示されている文字列をTabのキャプションといいます。
そのキャプション表示名をどのように入力したかというと、手入力で入力しました。
5名程度なら手動で入力してもたいした労力ではありませんが、実際問題として手動で入力するのはめんどくさい。
さらに人数が増えたらもっとめんどくさい。また変更があったら、その変更を
いちいち反映させるのが大変だということで
手入力は、実務的に実用的じゃないということになります。

そこで、そこでこのTabのキャプションを 直接手動で入力するのではなくて ユーザーフォームイニシャライズを使って 起動時に入れてしまおうというわけです。

今回は以下のような手順でユーザーフォームのタブストリップを作成していきます。

まず最初に初期値として、ユーザーフォームの、起動時にTabを選んでない場合、
その初期値としてどのデータを表示するのか、それを決めて表示するコードが必要です。
それからTab選択をチェンジしたら、ちゃんとチェンジして
チェンジされたTabに該当するデータを
表示するコードというように
その表示するのも2通り考えていきたいと思います。

UserForm_Initializeを利用する
第1段階としての実用へのステップは、イニシャライズを利用して、起動時にタブを読み込めるようにします。

まず、既存のタブ(デフォルト)を削除し、Addメソッドを使って5人分のタブを追加します。

Private Sub UserForm_Initialize() ' タブの設定 With TabStrip1 .Tabs.Clear .Tabs.Add "佐藤 清" .Tabs.Add "田中 博" .Tabs.Add "山口 昇" .Tabs.Add "斎藤 陽子" .Tabs.Add "岡田 裕子" End With ' 初期データを表示するSubプロシージャ ShowEmployeeInfo 1 End Sub
そして最初表示したときに初期値の設定を何にするかといったら、他に部品用のサブプロシージャーを作って初期データとして表示することにします。
後半でその部分を再利用するために、使いまわせるコド―を部品化したのです。showEmployeeInfoという名前にしました。

呼び出された”showEmployeeInfo”というサブプロシージャーは
引数として1を受けとっています。これは”row As Long”のことで、1行目という意味です。
行を指定して呼んでいるのです。
それでどこのシートでやるかというと、
このEmployeeという従業員データを入力したシートを用意してあるので
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("employees")
wsというシートを参照するように指示します。
TextBox1のバリューは、”ws.Cells(row + 1, 1).Value ' 社員ID”これですね。
TextBox1,2,3,4,5と、テキストボックスのオブジェクト名を変更せずに、そのまま使ってるんですけれども、
1のバリューは、WS.SalesRowは今1と受け取ってますから
2行目からデータが始まっているので1をプラスしています。
このサブプロシージャーを使って、行番号を受け取れば
それはタブをチェンジした時も使えるコードになります。
Sub ShowEmployeeInfo(row As Long) ' 社員情報のシート Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("employees") ' 選択されたタブに応じてテキストボックスにデータを表示 TextBox1.Value = ws.Cells(row + 1, 1).Value ' 社員ID TextBox2.Value = ws.Cells(row + 1, 2).Value ' 社員名 TextBox3.Value = ws.Cells(row + 1, 3).Value ' 所属課 TextBox4.Value = ws.Cells(row + 1, 4).Value ' 年齢 TextBox5.Value = ws.Cells(row + 1, 5).Value ' 性別 End Sub
部品マクロの後ろの1は引数として渡す行番号です。ShowEmployeeInfo 1
これにより、佐藤清ということ初期値は1行目の人を呼び出すという意味になります。
以下のコードはボタンを閉じるコードと、タブストリップをチェンジしたときに、何を表示するのかを指示するコードとなります。

UserForm_Initializeをさらに自動化する
通常は上記で紹介したUserForm_Initializeのコードでタブストリップを起動しても良いのですが、メンバーの変更に対応して自動的にTab Stripを追加する仕組みにしたらより一層便利です。
以下のコードでは、For~Next構文を使って、社員データの行数を数えて、2行目から社員のタブ使ってタブを追加しています。

下図が社員のデータです。データは2行目から始まり、タブのキャプションとして使うのはB列の社員名となります。

UserFormに作成した追加ボタンでタブを追加する
ユーザーフォームで写真の登録抹消ができたら便利ですね。それにはまずタブを追加します。

Private Sub btn_add_Click() がタブを追加するコードになります。
TabStrip1.Tabs.Add で 空のタブを追加しています。そして次の、
TabStrip1.Value = TabStrip1.Tabs.Count - 1で
今追加した空のタブを表示します。

ユーザーフォームの空のタブの社員情報を入力してから、以下の登録ボタンをクリックします。社員の追加ボタンでタブを追加するコードです。

こちらは、タブを削除するボタンです。タブを選択して、抹消ボタンをクリックすると、 タブとシート上に登録したデータも削除されます。

初期値として表示される1番目のデータです。

タブチェンジで選択がかわると、表示されるデータも変わります。

写真の追加(実際はタブの追加)ボタンをクリックすると、空のタブが追加できます。 必要なデータはユーザーが直接フォーム上に入力します。 タブのキャプションはデフォルトのままです。

このようにデータを入力してください。

完了したら、登録ボタンをクリックします。タブに名前が表示されました。

抹消ボタンをクリックすると、今入力したデータが削除されます。削除の記録がシート上に残ります。
