フォームからリストに転記するコード
マクロ 32回
フォームからリストへの転記をコードに
マクロ講座31回でフォームの形状ができましたので、今度はコードを記述していきます。
(サンプルファイルは、こちらから
マクロ32回サンプルデータ)
TextBoxのオブジェクト名変更
ユーザーフォームのキャプションを入力してくださいに変更しました。
![フォームからリストに転記するコードマクロ1](macro/macro32_01.png)
![フォームからリストに転記するコードマクロ1](macro/macro32_01.png)
ここからは、コードで利用しやすいように、コントロールの名称を変更していきます。
TextBox1のオブジェクト名を「titile」に変更。
![フォームからリストに転記するコードマクロ2](macro/macro32_02.png)
TextBox1のオブジェクト名を「titile」に変更。
![フォームからリストに転記するコードマクロ2](macro/macro32_02.png)
タイトルには日本語の全角文字を入力するので、IMEModeを全角ひらがなモードにします。4-fmIMEModeHiragana(IME を全角平にする。)に変更します。
デフォルトは、0-fmIMEModeNoControlで、これはIMEのモードを変更しません。
デフォルトは、0-fmIMEModeNoControlで、これはIMEのモードを変更しません。
![](macro/macro32_13.png)
TextBox2のオブジェクト名を「no」に変更。
![フォームからリストに転記するコードマクロ3](macro/macro32_03.png)
![フォームからリストに転記するコードマクロ3](macro/macro32_03.png)
Noには数値を入力するので、IMEModeを数値用に3-fmIMEModeDisable(IME をオフにする。)に変更します。
![](macro/macro32_11.png)
![](macro/macro32_11.png)
リリースDAYの欄も数値で日付を入力しますから、IMEModeを数値用に3-fmIMEModeDisable(IME をオフにする。)に変更します。
![](macro/macro32_12.png)
![](macro/macro32_12.png)
IMEモードを設定する
![IMEの入力モードを設定](gazo2013/macro/validation_ime.png)
TextBox3のオブジェクト名を「bookday」に変更。
![フォームからリストに転記するコードマクロ4](macro/macro32_04.png)
![フォームからリストに転記するコードマクロ4](macro/macro32_04.png)
CommamandButton3のオブジェクト名を「Addtolist」に変更。
![フォームからリストに転記するコードマクロ5](macro/macro32_05.png)
![フォームからリストに転記するコードマクロ5](macro/macro32_05.png)
UseForm入力ボタンのコード
入力ボタンをダブルクリックしてコードを表示させます。
![フォームからリストに転記するコードマクロ6](macro/macro32_06.png)
![フォームからリストに転記するコードマクロ6](macro/macro32_06.png)
入力したコードは次のようになります。
Me.Hide は、メッセージボックスを表示させる時に邪魔なのでフォームを隠しています。
![フォームからリストに転記するコードマクロ7](macro/macro32_07.png)
Me.Hide は、メッセージボックスを表示させる時に邪魔なのでフォームを隠しています。
![フォームからリストに転記するコードマクロ7](macro/macro32_07.png)
B2セルを選択して、そこからEnd(xlDown)。
End(xlDown)で下方向に最下端を探すという意味です。そしてOffset(1, 0)でその次の空白行を選択することになります。
End(xlDown)で下方向に最下端を探すという意味です。そしてOffset(1, 0)でその次の空白行を選択することになります。
Private Sub Addtolist_Click() Me.Hide Sheet1.Select Range("B2").End(xlDown).Offset(1, 0).Select ActiveCell.Value = title.Value ActiveCell.Offset(0, 1).Value = no.Value ActiveCell.Offset(0, 2).Value = bookday.Value ActiveCell.Offset(0, 2).NumberFormat = Range("D3").NumberFormat MsgBox "追加しました!" Me.Show End Sub
テキストボックスのオブジェクト名を変更してあるので、コードがわかりやすくなっていますね。
![フォームからリストに転記するコードマクロ8](macro/macro32_08.png)
![フォームからリストに転記するコードマクロ8](macro/macro32_08.png)
キャンセルボタンは入力内容をキャンセルしてクリアにするために設置しました。
![フォームからリストに転記するコードマクロ9](macro/macro32_09.png)
![フォームからリストに転記するコードマクロ9](macro/macro32_09.png)
キャンセルボタンでテキストボックスの内容がまとめてクリアされます。
![フォームからリストに転記するコードマクロ10](macro/macro32_10.png)
![フォームからリストに転記するコードマクロ10](macro/macro32_10.png)
UseForm入力ボタンのコード、1行目から入力するには
1行くらいは入力して、書式等の設定をしておいた方がよいかと思いますが、1行目から入力するには、どうするか知りたい場合もあるでしょう。
Range("B2")を選択するのでなく、Range("B1")を選択した場合は、下に降りてくれません。
下のセルからデータのある上のセルに飛ぶことは可能です。よく、RowsCountを使いますが、何もそこまで下に降りずとも、 この例では、十分に遠い下のセル、絶対にデータが入ってないセルから、上に飛んでもいいですよ。
それですと、B3から入力できます。
Range("B10000").End(xlUp).Offset(1, 0).Select
Range("B2")を選択するのでなく、Range("B1")を選択した場合は、下に降りてくれません。
下のセルからデータのある上のセルに飛ぶことは可能です。よく、RowsCountを使いますが、何もそこまで下に降りずとも、 この例では、十分に遠い下のセル、絶対にデータが入ってないセルから、上に飛んでもいいですよ。
それですと、B3から入力できます。
Range("B10000").End(xlUp).Offset(1, 0).Select