1つのユーザーフォームで2ページ目を作る方法

ページ切り替えのようなユーザーフォーム

ユーザーフォームにラベルをたくさん配置するとVBAコードを書くのが大変なので、少なくして切替すると次のページが現れて表示してくれる機能あったら便利だと思ったことありませんか?

例えば、表示したい内容は100個分(セルの値)あるのですが、ユーザーフォーム配置するラベルの数は20個にして、最初に表示されるのは1番目~20番目まで、2ページ目に切り替えると21番目~40番目。

これを繰り返して5ページ目には81番目~100番目を表示させれば、文字も大きく配置することができるので見やすくなりますし、VBAコード自体も単純なので簡単にできますよ。

目次

コマンドボタンをページ切替として使用する

ユーザーフォームが表示される時に配置したラベルの表示文字(Caption)が、セルの値を取得して書き換わるようにコマンドボタンにVBAコードを書くことにより、ページ切替しているように見せます。

ここでは5ページ分なのでコマンドボタンは5個という事になり、それぞれのコマンドボタンにセルの値を取得するようにして、いかにもページが切り替わったように見せているだけです。

1ページ目のVBA

Private Sub CommandButton1_Click()
For i = 1 To 20
With UserForm1.Controls(“Label” & i)
.Caption = Cells(i, 1)
End With
Next i
End Sub

2ページ目のVBA

Private Sub CommandButton2_Click()
For i = 1 To 20
With UserForm1.Controls(“Label” & i)
.Caption = Cells(i + 20, 1)
End With
Next i
End Sub

下線の部分が相違点で、1ページ目と2ページ目として使用しているコマンドボタンの番号と、i+20という部分が違うのが見て取れます。

+20とすることで、1+20という事になり21番目になり、3ページ目は+40、4ページ目は+60、5ページ目は+80に変更するだけでVBAコードは完成です。

2ページ目のVBA解説
  1. コマンドボタン2がクリックされたら
  2. 変数「i」を宣言して1~20までとする
  3. ユーザーフォーム1のラベル「i」の
  4. キャプション(表示文字)はセルi行目+20の1列目(セルA21)から取得する
  5. Withステートメント終了
  6. 1~20まで繰り返す
  7. マクロ記録終了

変数を1~20としたことで、ラベル番号・行数を同時に変わるようにしてありますので、もし行数が異なる時にはi+やiーでいくらでも調整可能です。

For~Nextで繰り返し処理を使えば、簡単にできるようになりますので、ぜひ活用してください。

変数i+数字をi+セルの値にして変化可能にする

今回の例では5ページ分だけなのでコマンドボタンを5個用意してVBAコードも5回コピーして、i+数字の部分だけ修正するだけでしたが、20個・・・100個となったら同じ作業も、ユーザーフォームのコマンドボタン配置スペースも大変な作業になってしまいます。

そこで、i+数字のこの数字の部分をセルの値から取得させれば、1個のコマンドボタンで無数の役割をすることができるようになります。

しかしながら、i+Cells(1,1)なんて事をやってもエラーになりまので、Dimを使って変数を宣言して格納することによって可能になりますので、詳細は下記に記載しています。

あわせて読みたい
繰り返し処理For~Nextで変数をセルの値から格納・取得する方法 複数のセルの値を繰り返し取得させてラベルキャプションに使う時にi+1のように使う時に定数ではなく、変数i+セルB1みたいに変数と一緒に数値も変えたいと思ったことあ...
目次