- はじめに
- ユーザーフォーム
- 標準フォームによるサブルーチン
- Private Sub UserForm_Initialize()への埋め込み
- ラベル
- テキストボックス
- オプションボタン
- スクロールバー
- コンボボックス
- コマンドボタン
- サイトご利用方法
はじめに
新規というのは、新しいデータをデータベースへ入力することを意味する。ここでは大方の人が使う可能性がある部品を取り扱う。
具体的には、ラベル、テキストボックス、オプションボタン、スクロールバー、コンボボックス、コマンドボタン、である。UserForm2の上にこれらの部品を配置して新規入力を行っていく。
part1で提示した新規のUserFormとは違っている。part1では都道府県名の入力をリストボックスにしたのだが、リストボックスは削除でも使用していることにより、コンボボックスに変更した。
目標とするUserFormは以下のようになる。
ユーザーフォーム
ユーザーフォームは部品をのせる土台である。これをダブルクリックをすると自動的にコードは以下のものができる。
Option Explicit
Private Sub UserForm_Click()
End Sub
このコードにOption Base 1をOption Explicitの下に書けばいいのだが、マクロを動かす場合、土台をクリックする場合はないので、これをイニシャライズに変更する。
Option Explicit
Option Base 1
Private Sub UserForm_Click()
End Sub
Private Sub UserForm_Initialize()
End Sub
この段階で UserForm_Click()は要らないので削除する。コードは以下のようになる。
Option Explicit
Option Base 1
Private Sub UserForm_Initialize()
End Sub
このPrivate Sub UserForm_Initialize()からEnd Subの間に部品やその他の初期値を設定するのである。これでフォームを立ち上げるたびに部品が初期化されるようになる。
標準フォームによるサブルーチン
広域変数宣言にPublic lcr As Integerを書く。広域変数領域とは、Option Base 1とサブルーチンの間に書く変数の宣言のことで、Publicをつけることにより、UserForm2、UserForm3などで、lcrという変数を自由に使えるようになる。
Option Explicit
Option Base 1
Public lcr As Integer
Public Sub lastCellRow()
lcr = Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Select
End Sub
サブルーチンは
Public Sub lastCellRow()
lcr = Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Select
End
である。
このサブルーチンは、データの最終行の下に入力できるようにするものである。
コードはセルの1列目のRows.count(エクセルの最下行104万行を意味する)をEnd(xlUp)つまりCtrl+↑を行い、データの最終行をとり、Offset(1, 0)で1行下を選択(Select)するという意味である。
Private Sub UserForm_Initialize()への埋め込み
Option Explicit
Option Base 1
Private Sub UserForm_Initialize()
Call lastCellRow
ScrollBar1.Value = 0
TextBox2.Value = ScrollBar1.Value
End Sub
サブルーチンを呼び出すにはCallを書く。本来はCallがなくてもいいのだが、サブルーチンを呼び出していることを明確にするために、必ず書くようにしてほしい。
ScrollBar1.Value = 0
TextBox2.Value = ScrollBar1.Value
この2行はスクロールバーの初期値の設定になっている。始めは0から始まり、それをテキストボックスへ表示させているものである。
ラベル
氏名、性別、男、女、年齢、都道府県の名前はすべてラベル表示で行っている。
書き方は、左下半分のプロパティ画面でCaptionのところで名前を変えている。
UserFormへの貼り付けは、ラベルをドラック&ドロップをするだけでOK。
以下、各部品はすべてドラック&ドロップをして配置していく。
テキストボックス
ドラック&ドロップをして部品を配置したら、ダブルクリックをしてコードを生成させ、必要なコードを書く。
Private Sub TextBox1_Change()
ActiveCell.Cells(lcr + 2, 1) = TextBox1.Value
End Sub
ポイントは_Changeになっていることと、変数lcrに+2をしていることである。
オフセット(1,0)で一行下を選択しているが、lcrの値は-1となっているので、+2をして、1に直している。
意味は1列目にテキストボックスの値を入力している、ということである。
テキストボックスに名前を入力すると、今回はデータの部分にマクロを配置していることにより、入力の状況が画面上でみることができる。
以下、すべての新規の入力はすべて画面上に入力していく様子がわかるようにしてある。
オプションボタン
ドラック&ドロップをして2つオプションボタンを配置したらそれぞれのボタンをダブルクリックする。生成されるコードと必要なコードは以下のようになる。
Private Sub OptionButton1_Click()
If OptionButton1.Value = True Then
ActiveCell.Cells(lcr + 2, 2) = "男"
End If
End Sub
Private Sub OptionButton2_Click()
If OptionButton2.Value = True Then
ActiveCell.Cells(lcr + 2, 2) = "女"
End If
End Sub
_Click()になっていることに注意をし、なかにコードを書く。
意味は
もし、オプションボタンがtrueだったら、アクティブセルの2列目に値を代入する
ということである。
文字列あるいは文字の場合はダブルクォーテーションで囲むこと。
また、If~,then~,End Ifはセットで使う。
スクロールバー
テキストボックスとスクロールバーを連動させる。UserFormのinitializeで初期設定をしたときにやったことがここで生きてくる。
まず、画面左下半分のプロパティ画面で、MaxとMinを設定する。
スクロールバーをダブルクリックして、コードを生成させる。
Private Sub ScrollBar1_Change()
TextBox2.Value = ScrollBar1.Value
ActiveCell.Cells(lcr + 2, 3) = TextBox2.Value
End Sub
_Change()となっていることを確認したらコードを記述する。
1行目はスクロールバーの値をテキストボックスへ入力し、
2行目はテキストボックスの値をセルの3列目へ入力させている。
コンボボックス
コンボボックスのリスト部分に都道府県名を入力する。今回は都道府県というシートを用意して、そこから入力させている。
都道府県の場合、コンボボックスのリスト部分に追加したり削除したりする必要がないので、コンボボックスをシングルクリックして画面左下半分のRowSourceに都道府県!A1:A47と入力する。
コンボボックスをダブルクリックしてコードを生成させる。
Private Sub ComboBox1_Change()
With ComboBox1
If .ListIndex = -1 Then
MsgBox "選択していません"
Else
ActiveCell.Cells(lcr + 2, 4) = .Text
End If
End With
End Sub
_Change()となっていたら、内部にコードを書く。
With ComboBox1~End Withまでがコンボボックスの1つの塊を意味し、そのなかで、If~then~else~End Ifで処理を記述している。
意味は.ListIndex (.をつけ忘れないように)が-1なら選択をしていない場合のエラー処理を記述し、Else以降で.Text(.をつけ忘れないように)テキスト部分の内容をセルの4列目に書き出している。
余談だが、プロと素人のプログラミングの違いはエラー処理をどのくらいかませるのかである。マクロプログラミング程度であれば自分だけで使用する場合がほとんどだと思うのでエラー処理に気を使わなくてもいいと思う。
コマンドボタン
入力と終了の2つのコマンドボタンを設定する。ドラック&ドロップをして配置をしたら、それぞれの名前を変更する。
方法はいままで通りで、画面左下半分のCaptionで行い、ダブルクリックしてコードを生成させる。
Private Sub CommandButton1_Click()
ActiveWorkbook.Save
Unload Me
Call inpActionButton
End Sub
Private Sub CommandButton2_Click()
ActiveWorkbook.Save
Unload Me
End Sub
1行目はワークブックを上書き保存し、2行目はフォームを消去している。ただし、入力の方は、3行目にもっとも簡単で単純な方法、つまりユーザーフォーム2を再度読み込ませている。
inpActionButtonは標準モジュールに書いたサブルーチンである。コードは以下の通り。
Sub inpActionButton()
UserForm2.Show
End Sub
.Show(.を忘れないように)でフォームを表示させているだけである。
サイトご利用方法
次のページ・前のページを利用するよりも、グローバルメニュー(ヘッダー部分にある項目)・サブメニュー記事の項目をクリックしていただければ、その項目の全体像が一目でみることができ、クリックすればそのサイトへ飛びます。
google、yahoo、Bingなどで検索する場合、検索ワードは先頭に、孤立じじい、と入力しその後に、グローバルメニュー・サブメニュー記事のどれかひとつの項目を入力すると、その検索サイトが上位表示されます。