Top

hiroyuki.tank.support.site

簡単!マクロ講座

第28回〜フォーム-セルへの入力〜

 テキストボックスやコンボボックスを作ってきましたが,これではただ表示しているだけで何も仕事はしてくれません。
 なにか仕事をさせる,例えばセルへ文字を入力したいことが多いですよね。
 ボタンをクリックしたら指定したセルにテキストボックスやコンボボックスに入力された文字を入れてくれるプログラムを書きましょう。

 なにかコンピュータに命令をするときにはイベントという言葉がポイントになるというのは以前説明しました。今回のイベントは「ボタンをクリック」ということになります。
 いま作っているボタンは「CommandButton1」ですから,CommandButton1をクリックしたらセルに文字を入力してくれるというようにしましょう。

 ユーザーフォームになにかしたときに動いて欲しいのでUserForm1に命令(プログラム)を書きます。
 いままでは標準モジュールというところに書いていましたが,フォームの場合は違うところに書かなければなりません。このプログラムを書く場所をまずは探しましょう。

 VBE画面のプロジェクトウィンドウの中の「フォーム」の中に「UserForm1」があります。これを右クリックすると,「コードの表示」と「オブジェクトの表示」というメニューがあります。
 「コードの表示」とは,UserForm1に記述してあるコード(命令のこと)を表示します。
 「オブジェクトの表示」とは,UserForm1自体を表示します。オブジェクトとは,もののことで,ここでの「もの」は「UserForm1」を指すので,これを選ぶとUserForm1が表示されます。

 今回はいちいち開かなくてもすぐに表示される方法を説明します。
 UserForm1のCommandButton1をダブルクリックしてみてください。

****************************************
Private Sub CommandButton1_Click()

End Sub
****************************************
 と表示されました。
 このPrivate Sub CommandButton1_Click()とEnd Subの間にプログラムを書いていきます。
 ここに「Sheets("sheet1").Range("b2") = UserForm1.TextBox1」と書いてみてください。
 プログラムを実行し,テキストボックスに何か文字を入れてCommandButton1をクリックすると,どうです?いまテキストボックスに入力した文字がエクセルシートのb2にちゃんと入っていませんか。
 これは,「Sheets("sheet1").Range("b2") に UserForm1.TextBox1 を入れなさい」という命令です。

 これを応用するとコンボボックスも簡単ですね。
 先ほどの続きに「Sheets("sheet1").Range("b3") = UserForm1.ComboBox1」と書いてみてください。これでコンボボックスで選択した文字をセルb3に入れることができます。

 「実行してもコンボボックスのリストが出ません」という方があると思います。これは実行するプログラムの問題です。
 ユーザーフォームのところで実行するとユーザーフォームを実行してしまうので,前回作った標準モジュールの
Sub コンボ()
UserForm1.ComboBox1.List = Sheets("sheet1").Range("a2:a6").Value
UserForm1.Show
End Sub
 は全然呼び出していなくて関係なくなってしまったからです。
 コンボボックスに表示すべきリストをきちんと表示させたいときはこの標準モジュールの「Show」があるプログラムを実行してください。

 今回のポイントです。
1.ユーザーフォームでなにかしたい(してほしい)ときはユーザーフォームにプログラムを書く。
2.いま実行するプログラムはどれか。

| hiroyuki.tank.support.site.Top | このページのTop | マクロ講座目次 | 前回 | 次回 |