ExcelVBAへの道
 
第11章 練習問題
1.ステップ1
  1. 下記のようにワークシート上のボタンをクリックするとフォームが表示される。
  2. フォーム上の「書き込みボタン」をクリックするとテキストボックス1の文字列がワークシートC4に入力される。
  3. フォーム上の「読み込みボタン」をクリックするとワークシートC5の文字列がフォーム上のテキストボックス2に読み込まれるようにする。
  4. 「閉じるボタン」をクリックするとフォームが閉じる。
ユーザーフォームとシートの関係を理解するために、下記のような例を初めに考えましょう。



  1. B4からC5にデータと罫線を作成。
  2. VBEに切り替えて、メニューの挿入からユーザーフォームの挿入でフォーム作成。
  3. フォーム上にテキストボックス1、テキストボックス2を作成
  4. フォーム上にコマンドボタン1、2、3を作成
  5. ワークシート上の「フォーム表示」ボタン作成(コントロールツールバーのコマンドボタンを利用)
  6. 「フォーム表示」ボタンをダブルクリックするとコードウィンドウにコードが新規作成されます。
  7. Private Sub CommandButton1_Click()
    (実行コード部分)
    End Sub
  8. UserForm1.Show   という実行コードを書きます。
  9. メニューのデバッグからコンパイルしてください。
  10. エクセルシートを表示してフォーム表示」ボタンをクリックするとホームが表示されることを確認して下さい。
  11. この状態では書き込みボタン、読み込みボタン、閉じるボタンをクリックしても何起こりません。
  12. ユーザーフォームの右上の×ボタンをクリックしてフォームを閉じます。
  13. VBEを表示してプロジェクトウィンドウにあるUserForm1をダブルクリックします。
  14. フォームが表示されるので、「書き込み」ボタンをダブルクリックして、コードウィンドウを表示して実行コードを書きます。
  15. Private Sub CommandButton1_Click()
    Range("C4").Select
    Range("C4").Value = TextBox1.Value
    End Sub
  16. 「読み込み」ボタンをダブルクリックして、コードウィンドウを表示して実行コードを書きます。
  17. Private Sub CommandButton2_Click()
    TextBox2.Value = Range("C5").Value
    End Sub
  18. 閉じる」ボタンをダブルクリックして、コードウィンドウに実行コードを書きます。
  19. Private Sub CommandButton3_Click()
    Unload UserForm1
    End Sub
  20. テキストボックス1をクリックして選択、プロパティウィンドウのTEXTに"合格"の文字列を入力。
  21. 再度、メニューのデバッグからコンパイルしてください。
  22. これでできました。
  23. エクセルシートに切り替えて動作を確認して下さい。
1.ステップ2

下記のようなセルの色を塗りつぶすフォームを作成しましょう。
目的は、
  1. 変数はどのように使うのか?

  1. フォームにラベル1(色のコントロール)、ラベル2(R)、レベル3(G)、ラベル4(B)を配置
  2. テキストボックス1、2,3、を配置
  3. 色作成コマンドボタンを配置
  4. 「色作成」ボタンをダブルクリックして、コードウィンドを表示
  5. 下記のコードを作成(各テキストボックスの値をVal関数で数値化している)

Private Sub CommandButton2_Click()

With Selection.Interior
.Color = RGB(Val(TextBox1.Value), Val(TextBox2.Value), Val(TextBox3.Value))
.Pattern = xlSolid
End With

End Sub

  1. ワークシート上にコマンドボタンを配置してダブルクリックする。
  2. コードウィンドウに下記のように書く。
  3. モードレスでフォームを表示するとフォームを表示していながら、ワークシートを選択できる。
  4. これでボタンを押すとフォームを表示できる。
  5. フォーム表示後、3つのテキストボックスに0から255までの数値を代入して色作成ボタンをクリックすると、エクセルのワークシートセルに色を付けることができる。

Private Sub CommandButton1_Click()

UserForm1.Show vbModeless

End Sub

  1. Val関数でテキストボックスの文字列を数値化してセルに色をつけましたが、関数を使わない場合には変数を使う必要があります。
  2. まず、変数を宣言
  3. 変数に値を代入
  4. 代入された変数を設定
  5. フォーム表示後、3つのテキストボックスに0から255までの数値を代入して色作成ボタンをクリックすると、エクセルのワークシートセルに色を付けることができる。

Private Sub CommandButton1_Click()
Dim r, g, b As Integer

r = TextBox1.Value
g = TextBox2.Value
b = TextBox3.Value

With Selection.Interior
.Color = RGB(r, g, b)
.Pattern = xlSolid
End With

End Sub

  1. しかし、各テキストボックスに0から255までの値を入れてから「色作成」ボタンをクリックしないとエラーが発生する。
  2. そこで、フォームを表示した時に自動的に各テキストボックスに規定値を代入するようにしたい。
  3. オブジェクトボックスの▼をクリックしてUserFormを選択、プロシージャボックスの▼をクリックしてInitializeを選択後、下記のコードを書いてください。
  4. Initializeイベントはオブジェクトが読み込まれたあとで、そのオブジェクトが表示される前に発生します。

Private Sub UserForm_Initialize()
Dim r, g, b As Integer

r = 0  ’0を代入して初期化している
g = 0
b = 0

TextBox1.Value = r
TextBox2.Value = g
TextBox3.Value = b

End Sub

  1. テキストボックスの横にスピンボタンを設置してマウスでクリックするだけで数値が代入されるようにしたい。
  2. フォームの3つの各テキストボックスの横にスピンボタンを設置
  3. スピンボタンをダブルクリックしてコードを表示
  4. 下記のようなコードを書き込む。
  5. 残り2つのスピンボタンも同じ要領でコード作成。
  6. スピンボタンの最小値と最大値のプロパティの設定するコードを作成しないといけません。
  7. 何故ならRGBの値が0から255までの値だからです。
  8. Activateイベントはフォームがアクティブになったときに発生します。

Private Sub SpinButton1_Change()

TextBox1.Value = SpinButton1.Value

End Sub

Private Sub UserForm_Activate()

SpinButton1.Min = 0
SpinButton1.Max = 255
SpinButton1.Value = 0
TextBox1.Value = 0

SpinButton2.Min = 0
SpinButton2.Max = 255
SpinButton2.Value = 0
TextBox2.Value = 0

SpinButton3.Min = 0
SpinButton3.Max = 255
SpinButton3.Value = 0
TextBox3.Value = 0

End Sub