Microsoft Excelでフォームを作成する方法
コース予約フォームは、ユーザーフォームの設計と関連するVBAコーディングの原則を説明するシンプルなフォームです。
テキストボックス、コンボボックス、フレームにグループ化されたオプションボタン、チェックボックス、コマンドボタンなどのコントロールを使用します。
ユーザーが[OK]ボタンをクリックすると、入力内容がワークシートの次の使用可能な行に入力されます。
Excelフォームの説明:
ユーザーがフリーテキストを入力できる2つの単純なテキストボックス(Name:_と_Phone:)と、2つのコンボボックス(Department_と_Course)があります
これにより、ユーザーはリストからアイテムを選択できます。
ユーザーがオプションの1つだけを選択できるように、フレーム(Level)にグループ化された3つのオプションボタン(Introduction _、 Intermediate 、および_Advanced)があります。
2つのチェックボックス(Lunch Required_と_Vegetarian)があり、これらはフレームにグループ化されていないため、必要に応じて両方を選択できます。
ただし、予約者が昼食を望まない場合は、菜食主義者であるかどうかを知る必要はありません。そのため、_Vegetarian_チェックボックスは必要になるまでグレー表示されます。
3つのコマンドボタン(OK _、 Cancel_、および_Clear Form_)があり、それぞれをクリックすると事前定義された機能を実行します。
コントロールのプロパティ設定:
Control |
Type |
Property |
Setting |
UserForm |
UserForm |
Name |
frmCourseBooking |
Caption |
Course Booking Form |
||
Name |
Text Box |
Name |
txtName |
Phone |
Text Box |
Name |
txtPhone |
Department |
Combo Box |
Name |
cboDepartment |
Course |
Combo Box |
Name |
cboCourse |
Level |
Frame |
Name |
fraLevel |
Caption |
Level |
||
Introduction |
Option Button |
Name |
optIntroduction |
Intermediate |
Option Button |
Name |
optIntermediate |
Advanced |
Option Button |
Name |
optAdvanced |
Lunch Required |
Check Box |
Name |
chkLunch |
Vegetarian |
Check Box |
Name |
chkVegetarian |
Enabled |
False |
||
OK |
Command Button |
Name |
cmdOk |
Caption |
OK |
||
Default |
True |
||
Cancel |
Command Button |
Name |
cmdCancel |
Caption |
Cancel |
||
Cancel |
True |
||
Clear Form |
Command Button |
Name |
cmdClearForm |
=== Excelでフォームを作成する自分でフォームを作成する場合は、上の図に示すレイアウトをコピーするだけです。以下の手順に従ってください:
1.フォームを含めるブックを開き(マクロなどのユーザーフォームをブックに添付する必要があります)、Visual BasicEditorに切り替えます。
-
Visual Basic Editorで、[ユーザーフォームの挿入]ボタンをクリックします(または[挿入]> [ユーザーフォーム]に移動します)。
3.ツールボックスが単独で表示されない場合(最初にフォームをクリックして非表示になっていないことを確認します)、[ツールボックス]ボタンをクリックします(または[表示]> [ツールボックス]に移動します)。
4.フォームにコントロールを配置するには、ツールボックスの適切なボタンをクリックしてから、フォームをクリックします。コントロールは、端をドラッグして移動したり、ボタンを周囲にドラッグしてサイズを変更したりできます。
5.コントロールのプロパティを編集するには、選択したコントロールが選択されていることを確認してから、[プロパティ]ウィンドウで適切な変更を加えます。プロパティウィンドウが表示されない場合は、[表示]> [プロパティウィンドウ]に移動します。
6.フォームからコントロールを削除するには、コントロールを選択して、キーボードのDeleteキーをクリックします。
ユーザーフォームは、フォームとそのさまざまなコントロールを駆動するコードが作成されるまで、実際には何もしません。次のステップは、フォーム自体を駆動するコードを書くことです。
コードの追加:1フォームの初期化=====フォームの初期化:
ほとんどのフォームは、開くときに何らかの設定が必要です。これは、デフォルト値の設定、フィールドが空であることの確認、またはコンボボックスのリストの作成である可能性があります。このプロセスは_Initialisingthe Form_と呼ばれ、UserForm_Initializeというマクロによって処理されます(「initialis(z)e」という単語のさまざまなスペルで混乱した場合は、私が英語を話し、VBAがアメリカ語を話すためですが、心配しないでください、VBAはあなたのためにそれを綴ります!)。コース予約フォームを初期化するコードを作成する方法は次のとおりです。
1.フォームのコードウィンドウを表示するには、[表示]> [コード]に移動するか、F7をクリックします。
2.コードウィンドウが最初に開いたとき、空のUserForm_Click()プロシージャが含まれています。コードウィンドウの上部にあるドロップダウンリストを使用して、[ユーザーフォーム]と[初期化]を選択します。これにより、必要な手順が作成されます。これで、UserForm_Click()プロシージャを削除できます。
3.次のコードをプロシージャに入力します:
Private Sub UserForm_Initialize() txtName.Value = "" txtPhone.Value = "" With cboDepartment .AddItem "Sales" .AddItem "Marketing" .AddItem "Administration" .AddItem "Design" .AddItem "Advertising" .AddItem "Dispatch" .AddItem "Transportation" End With cboDepartment.Value = "" With cboCourse .AddItem "Access" .AddItem "Excel" .AddItem "PowerPoint" .AddItem "Word" .AddItem "FrontPage" End With cboCourse.Value = "" optIntroduction = True chkLunch = False chkVegetarian = False txtName.SetFocus End Sub
初期化コードのしくみ:
UserForm_Initialize()プロシージャの目的は、VBAでユーザーフォームを使用できるように準備し、さまざまなコントロールのデフォルト値を設定し、コンボボックスに表示されるリストを作成することです。
これらの行は、2つのテキストボックスの内容を空に設定します:
txtName.Value = "" txtPhone.Value = ""
次に、コンボボックスの説明があります。最初にリストの内容を指定し、次にコンボボックスの初期値を空に設定します。
With cboDepartment .AddItem "Sales" .AddItem "Marketing" (as many as necessary…) End With
cboDepartment.Value = “”
必要に応じて、オプショングループから最初の選択を行うことができます。この場合:
optIntroduction = True両方のチェックボックスがFalseに設定されています(つまり、チェックボックスがありません)。チェックボックスをすでにオンにして表示する場合は、Trueに設定します。
chkLunch = False chkVegetarian = False最後に、フォーカスは最初のテキストボックスに移動します。これにより、ユーザーはテキストボックスにカーソルを置き、入力を開始する前にボックスをクリックする必要がなくなります。
txtName.SetFocus ===コードの追加:2ボタンを機能させるフォームには3つのコマンドボタンがあり、それぞれに独自のプロシージャを使用する必要があります。単純なものから始めて…
キャンセルボタンのコーディング:
以前は、[プロパティ]ウィンドウを使用して、[キャンセル]ボタンの[キャンセル]プロパティを_True_に設定しました。コマンドボタンの[キャンセル]プロパティをTrueに設定すると、ユーザーがキーボードのEscキーを押したときにそのボタンを「クリック」する効果があります。しかし、これだけではフォームに何も起こりません。この場合、フォームを閉じるボタンのクリックイベントのコードを作成する必要があります。方法は次のとおりです:
-
Visual Basic Editorで編集できるようにユーザーフォームを開いた状態で、[キャンセル]ボタンをダブルクリックします。フォームのコードウィンドウが開き、cmdCancel_Click()プロシージャを編集できるようになります。
2.フォームを閉じるためのコードは非常に単純です。次のようになるように、プロシージャにコード行を追加します。
Private Sub cmdCancel_Click() Unload Me End Sub
フォームクリアボタンのコーディング:
ユーザーが気が変わってすべてをリセットしたい場合にフォームをクリアし、一度に複数の予約を行う場合に簡単にするためのボタンを追加しました。それがしなければならないのは、Initialiseプロシージャを再度実行することだけです。 Callキーワードを使用して、マクロに別のマクロ(または必要に応じて一連のマクロ)を実行するように指示できます。
-
[フォームのクリア]ボタンをダブルクリックします。フォームのコードウィンドウが開き、cmdClearForm_Click()プロシージャを編集できるようになります。
2.プロシージャにコード行を追加して、次のようにします。
Private Sub cmdClearForm_Click() Call UserForm_Initialize End Sub
OKボタンのコーディング:
これは、ユーザーの選択とテキスト入力をワークシートに転送するジョブを実行する必要があるコードです。 [キャンセル]ボタンの[キャンセル]プロパティをTrueに設定すると、[OK]ボタンの[デフォルト]プロパティも_True_に設定されます。これには、ユーザーがキーボードのEnter(またはReturn)キーを押したときに[OK]ボタンをクリックする必要があります(Tabキーを使用して別のボタンにタブ移動していない場合)。
ボタンを機能させるためのコードは次のとおりです。
-
[OK]ボタンをダブルクリックします。フォームのコードウィンドウが開き、cmdOK_Click()プロシージャを編集できるようになります。
2.プロシージャを編集して、次のコードを追加します。
Private Sub cmdOK_Click() ActiveWorkbook.Sheets("Course Bookings").Activate Range("A1").Select Do If IsEmpty(ActiveCell) = FalseThen ActiveCell.Offset(1, 0).Select End If Loop Until IsEmpty(ActiveCell) = True ActiveCell.Value = txtName.Value ActiveCell.Offset(0, 1) = txtPhone.Value ActiveCell.Offset(0, 2) = cboDepartment.Value ActiveCell.Offset(0, 3) = cboCourse.Value If optIntroduction = True Then ActiveCell.Offset(0, 4).Value = "Intro" ElseIf optIntermediate = True Then ActiveCell.Offset(0, 4).Value = "Intermed" Else ActiveCell.Offset(0, 4).Value = "Adv" End If If chkLunch = True Then ActiveCell.Offset(0, 5).Value = "Yes" Else ActiveCell.Offset(0, 5).Value = "No" End If If chkVegetarian = True Then ActiveCell.Offset(0, 6).Value = "Yes" Else If chkLunch = False Then ActiveCell.Offset(0, 6).Value = "" Else ActiveCell.Offset(0, 6).Value = "No" End If End If Range("A1").Select End Sub
CmdOK_Clickコードのしくみ:
最初の2行は、正しいブックがアクティブであることを確認し、選択範囲をセルA1に移動します。
ActiveWorkbook.Sheets("Course Bookings").Activate Range("A1").Select The next few lines moves the selection down the worksheet until it finds an empty cell: Do If IsEmpty(ActiveCell) = False Then ActiveCell.Offset(1, 0).Select End If Loop Until IsEmpty(ActiveCell) = True
次の4行は、アクティブセル(列Aにある)を参照として使用し、一度にセルを_行に沿って_移動して、フォームの内容をワークシートに書き込み始めます。
ActiveCell.Value = txtName.Value ActiveCell.Offset(0, 1) = txtPhone.Value ActiveCell.Offset(0, 2) = cboDepartment.Value ActiveCell.Offset(0, 3) = cboCourse.Value
次に、オプションボタンについて説明します。これらはフォームのフレームに配置されているため、ユーザーは1つしか選択できません。 IFステートメントを使用して、各オプションの処理内容をExcelに指示します。
If optIntroduction = True Then ActiveCell.Offset(0, 4).Value = "Intro" ElseIf optIntermediate = True Then ActiveCell.Offset(0, 4).Value = "Intermed" Else ActiveCell.Offset(0, 4).Value = "Adv" End If
VBA IFステートメントは、ExcelのIF関数よりも管理がはるかに簡単です。
オプションはいくつでも持つことができ、それぞれに追加のElseIfを挿入するだけです。オプションが2つしかない場合は、ElseIfは必要なく、IfとElseだけで十分です(忘れないでください。すべてEnd Ifが必要です)。
チェックボックスごとに別のIFステートメントがあります。 [昼食が必要]チェックボックスの場合、ボックスのチェックボックスは、その人が昼食を必要とする「はい」を意味し、チェックマークがない場合は、「いいえ」を意味します。
If chkLunch = True Then ActiveCell.Offset(0, 5).Value = "Yes" Else ActiveCell.Offset(0, 5).Value = "No" End If
ベジタリアンのチェックボックスにも同様のIFステートメントを使用できますが、昼食を必要としない場合は、ベジタリアンであるかどうかは関係ありません。いずれにせよ、彼らが昼食を必要としなかったという理由だけで彼らが菜食主義者ではなかったと考えるのは間違っているでしょう。したがって、IFステートメントには2番目のネストされたifステートメントが含まれます。
If chkVegetarian = True Then ActiveCell.Offset(0, 6).Value = "Yes" Else If chkLunch = False Then ActiveCell.Offset(0, 6).Value = "" Else ActiveCell.Offset(0, 6).Value = "No" End If End If
ボックスのチェックマークは、その人が菜食主義者であることを意味します。ボックスにチェックマークがない場合、ネストされたIFステートメントは[ランチが必要]チェックボックスを確認します。 [ランチが必要]チェックボックスにチェックマークが付いている場合、[ベジタリアン]チェックボックスにチェックマークが付いていないということは、その人がベジタリアンではないことを意味するため、セルに「いいえ」を挿入します。ただし、[ランチが必要]チェックボックスにチェックマークが付いていない場合は、その人が菜食主義者であるかどうかがわからないため(とにかく問題ありません)、セルは空白のままになります( “”)。
最後に、選択内容がワークシートの先頭に戻され、次のエントリの準備が整います。
Range( “A1″)。Select ===コードの追加3:フォームの操作最後に、フォームの使用中にフォームのコントロールを操作する方法の例。コントロールプロパティが設定されている場合、VegetarianチェックボックスのEnabledプロパティは_False_に設定されていました。コントロールが有効になっていない場合、_user_は値を入力できませんが、既に存在する値を保持でき、VBAは値を追加、削除、または変更できます。
彼らが昼食を注文していなければ、その人が菜食主義者であるかどうかを知る必要はありません(たとえ菜食主義者であっても!)。そのため、[ランチが必要]チェックボックスにチェックマークを付けない限り、[ベジタリアン]チェックボックスは無効のままです。その後、ユーザーは必要に応じてベジタリアンチェックボックスを自由にチェックできます。彼らがそれをチェックすると、彼らが「はい」と答えたことがわかり、そうでない場合は、彼らが「いいえ」と答えたことがわかります。
[ランチが必要]チェックボックスの値が変更されるたびに自動的に実行されるプロシージャを使用することで、Enabledプロパティを_False_から_True_に切り替えることができます。幸い、より多くのコントロールに_Change_プロシージャがあり、ここで使用するのはchkLunch_Change()です。これを使用して、[ランチが必要]チェックボックスがオンになっている場合は[ベジタリアン]チェックボックスを有効にし、[ランチが必要]チェックボックスがオンになっていない場合は無効にします。
やらなければならないことがもう1つあります。誰かが[ランチが必要]チェックボックスをオンにし、[ベジタリアン]チェックボックスもオンにしたとします。次に、気が変わって、[ランチが必要]チェックボックスからチェックボックスを外しました。ベジタリアンチェックボックスは無効になりますが、以前に入力されたティックは残ります。
追加のコード行を使用すると、ボックスが無効になっているときにティックが確実に削除されます。これが全体です:
Private Sub chkLunch_Change() If chkLunch = True Then chkVegetarian.Enabled = True Else chkVegetarian.Enabled = False chkVegetarian = False End If End Sub
フォームを開くこれでフォームを使用する準備ができたので、単純なマクロで開く必要があります。これは、カスタムツールバーボタン、ワークシートに描画されたコマンドボタン、または任意のグラフィックに添付できます(グラフィックを右クリックして[マクロの割り当て]を選択します)。必要に応じて、ブック用の新しいモジュールを作成し、次の手順を追加します。
Sub OpenCourseBookingForm() frmCourseBooking.Show End Sub
私たちのブログが気に入ったら、Facebookで友達と共有してください。また、TwitterやFacebookでフォローすることもできます。
_私たちはあなたからの連絡をお待ちしております。私たちの仕事を改善、補完、または革新し、あなたのためにそれをより良くする方法を教えてください。 [email protected]_までご連絡ください