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

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

ユーザーフォーム講座 動画編 応用_01回
タイトル

動画で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

マクロ動画 社員、生徒、メンバーの管理をするユーザーフォーム

https://youtu.be/ZH0ON6eccDg

Tab Stripを実務で使えるレベルまで

基礎編でご紹介したTab Stripを起動したのがこちらです。
社員は現在5名です。

NAMAE1

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

NAMAE2

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

NAMAE3

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

NAMAE4

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

NAMAE5

UserForm_Initializeを利用する

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

NAMAE6

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

NAMAE7
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という名前にしました。

NAMAE8

呼び出された”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行目の人を呼び出すという意味になります。

以下のコードはボタンを閉じるコードと、タブストリップをチェンジしたときに、何を表示するのかを指示するコードとなります。

NAMAE9

UserForm_Initializeをさらに自動化する

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

NAMAE10

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

NAMAE11

UserFormに作成した追加ボタンでタブを追加する

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

NAMAE20

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

NAMAE13

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

NAMAE12

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

NAMAE14

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

NAMAE15

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

NAMAE16

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

NAMAE17

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

NAMAE18

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

NAMAE19

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

NAMAE20