<HOME  <お願い事項   <Access2002 TOP   <Access2000 TOP   <サイト内検索
 Access97 VBAの森>ExcelでVBA



(4)

で、最後にコメントをD列に代入するように書き込んで、完了です。
じゃあ、「Sub/ユーザーフォームの実行」で、ここまでのテストをしてみましょうか。

どうでしょう。ちょっとテストしにくいですけど、セルの中に値入ります?


で、この後どうするか・・・ってことも、また考えないとイケナイです。
どうしましょうねぇ。続けて他のネコの登録ができる状態にしましょうか。
それとも、いったんフォームを閉じるとか・・・。

閉じちゃうのもなんですかね。
じゃあ、セルをいっこ下に移動して、新しいネコ番号を代入して、お名前やコメントの入力状態に備えましょうか。

やることは、

アクティブセルをひとつ下に移動
そのセルの中身に1を足し、新しいネコ番号を計算してTextbox3に代入
コメント、おなまえのテキストボックスの中身をクリア

これくらいかな・・・。
オプションボタンは多分最後にクリックしたものが選択されてるままだと思いますけど・・・これはこのままでよしとしましょう。
さっき6つかいたIf文みたいなこと(TrueだったらFalseを代入)をすればいいんですけど、こいつはゆとりがあったらやりましょう。

Private Sub CommandButton1_Click()
'---おなまえの入力チェック
If TextBox1 = "" Then
 MsgBox "お名前の入力がありません"
Else
'---セルに値を代入
 Selection.Offset(1, 0) = TextBox3
 Selection.Offset(1, 1) = TextBox1
 If OptionButton1.Value = True Then
  Selection.Offset(1, 2) = "黒"
 End If
 If OptionButton2.Value = True Then
  Selection.Offset(1, 2) = "白"
 End If
 If OptionButton3.Value = True Then
  Selection.Offset(1, 2) = "茶"
 End If
 If OptionButton4.Value = True Then
  Selection.Offset(1, 2) = "ぶち"
 End If
 If OptionButton5.Value = True Then
  Selection.Offset(1, 2) = "しま"
 End If
 If OptionButton6.Value = True Then
  Selection.Offset(1, 2) = "その他"
 End If
 End If
 Selection.Offset(1, 3) = TextBox2
'---アクティブセル移動
Dim CelNbr As String
CelNbr = "A" & ActiveCell.Row + 1
Range(CelNbr).Select



End Sub

セルの番号を作成する方法、前に一度やりましたよね。

わたしはここでは、まずCelNbrという変数を使わせていただくよう宣言をしました。
これは何でもいいですよ。変数名ですから、AでもBでもセル番号でも。
ただし、何という名前でどういう変数を作ったか、ちゃんと管理してくださいね。
「なんだかわかんないけど本に載ってるとおりにやった」では絶対だめです。

で、いちおうこの変数は文字扱いにします。しなくてもできますが、まあ、ちゃんとStringとして使いますよ、と言っておいてやった方が何かといいのです。

文字扱いをしているので、A16と表記したいときは"A16"とダブルコーテーションで囲みます
でも、Aの後ろはアクティブセルの行番号+1という具合に、その都度違う値なので、ダブルコーテーションの外に出します
ダブルコーテーションの中はそのまま利用され、外のものはその都度値を拾ってくれるわけですね。
で、文字扱いなので+じゃなくて&で足しあわせます。

ちょっとややこしいですが、この""と&の法則にも慣れておきましょう。+と&の違いも、はっきりさせておいた方がいいですね。

これで、一番下のネコ番号のところにアクティブセルが移動するはずです。

さらに、ネコ番号を作って、TextBox3に代入します。
で、残りの2つのテキストボックスは空っぽにしましょう。
空っぽといっても、""と、空文字を代入するような形になります。

'---ネコ番号作成
TextBox3 = Selection.Value + 1
'---フォーム内を初期化
TextBox1 = ""
TextBox2 = ""

最後に、おなまえのテキストボックスにカーソルが移動していると新設、いや親切ですよね。

TextBox1.SetFocus

カーソルがあって、入力や選択が可能な状態になっているテキストボックスなどのことを「フォーカスを獲得している」と表現することがあります。
まあ、はっきりいってこんなむずかしい言葉をこねくり回しているより、一行書いてみて試した方が何倍も役に立ちますので、とにかくやってみましょう。


Private Sub CommandButton1_Click()
'---おなまえの入力チェック
If TextBox1 = "" Then
 MsgBox "お名前の入力がありません"
Else
'---セルに値を代入
 Selection.Offset(1, 0) = TextBox3
 Selection.Offset(1, 1) = TextBox1
 If OptionButton1.Value = True Then
  Selection.Offset(1, 2) = "黒"
 End If
 If OptionButton2.Value = True Then
  Selection.Offset(1, 2) = "白"
 End If
 If OptionButton3.Value = True Then
  Selection.Offset(1, 2) = "茶"
 End If
 If OptionButton4.Value = True Then
  Selection.Offset(1, 2) = "ぶち"
 End If
 If OptionButton5.Value = True Then
  Selection.Offset(1, 2) = "しま"
 End If
 If OptionButton6.Value = True Then
  Selection.Offset(1, 2) = "その他"
 End If
End If
Selection.Offset(1, 3) = TextBox2
'---アクティブセル移動
Dim CelNbr As String
CelNbr = "A" & ActiveCell.Row + 1
Range(CelNbr).Select
'---ネコ番号作成
TextBox3 = Selection.Value + 1
'---フォーム内を初期化
TextBox1 = ""
TextBox2 = ""
TextBox1.SetFocus
End Sub

と、こんな感じかな・・・。適当にコメントは入力してくださいね。
では、改めてテストしてみてください。
いかがでしょう。これなら、いったん登録した後、次々にネコ登録をすることができますよね。


さて、では次に「キャンセル」のコマンドボタンの処理を書きましょう。
これは単純に「このフォームを閉じる」という操作にしようと思います。これはお決まり文句で

Unload UserForm1

と書きます。もうひとつの方のコマンドボタンのクリックしたときのイベントに書き込んでみましょう。
UserForm1とは、今みなさんが作っているフォームの名前のことです。多分みなさんのもこういう名前だと思うんですけど・・・。


さて、最後に、このフォームを開く動作を考えないといけないですね。
多分、最初はネコ名簿のワークシートが画面に出ている状態だと思うんですね。まあ、そう仮定して、そこからさっきのフォームを出すには・・・。
どうしましょうか。

フォームを開くための命令文は

UserForm1.Show

です。これもお決まり文句ですね。

こういう内容の処理をするプログラムを別に作っておきましょうか。
では、ええと、メニューバーの[挿入]→[標準モジュール]というのを選んで、独立した別のプログラムを書けるようにしましょう。
なんかウィンドウが出てきますよね。

で、なんか適当なプログラムの名前を付けます。何にしようかな。「ネコ登録」とでもしますかね。

Public Sub ネコ登録( )

と入力してEnterキーを押すと、下にEnd Subと勝手に文字が出てきます。ネコ登録という処理を、この間に記入するわけですね。
で、UserForm1.Showと書きます。


では、Excelのワークシートの方を表示させましょう。
さて、どういう時にさっきのネコ登録プログラムを動かすか・・・。無難にコマンドボタンを作りましょうかね。

メニューバー[表示]→[ツールバー]→[フォーム]で、フォーム用のツールバーを出しましょう。
どのボタンがコマンドボタン作成用かは、いいですよね。
適当にあいているところにコマンドボタンを作ってください。
多分、自動的に「このボタンクリックしたら、なにをする?」と聞いてくると思います。
一覧の中にさっき作ったネコ登録プログラムがあるはずなので、これを選びましょう。


ボタンの標題などはお任せします。
さて、いよいよこれで本番ですね。ボタンをクリックしたらさっき作ったフォームが出て来て、ネコの登録ができます?


なんだかだらだらといいかげんに作っちゃいましたが、段取りとか気を付けなくちゃいけないこととか、いろいろありますよね。

はっきり言って、この程度の入力フォームでは、ここまで作り込むメリットはありません。
Excelはワークシートの入力機能自体とても優秀です。ワークシートの使い方を正しく理解すれば、VBAなんかでしくみを作り込む必要はまったくないのです。

もう少し横に長いワークシートや、入力項目が多い場合などは逆に威力を発揮するかもわかりませんが、そうとういろいろなことを考慮して、段取りよくくり返しテストをしなければ、思ったような処理を作ることはまず不可能です。

VBAを使えば便利になる、高度な処理が可能になると思い込んでおられる方も多いですが、それは考えようかもしれないですね。

VBAの構文そのものの書き方よりも、まずワークシートの構造やExcelそのものの機能を詳しく知ってこそ、処理を組み立てることができるようになるのではないかな、と思います。