2016年1月12日火曜日

エクセルにフォームをつける Part I (02)

エクセルのデータ表で、フォームを作って操作する(その2)フォームにデータを表示

※前回の内容は→ Part I (01)です。 です。
前回終了時点のサンプルファイルはここにあります→ 右クリックでここからダウンロードできます(ファイル名sample01.xlms)

今回は、シート上のボタンをクリックすると、5行目のデータが表示されるようにします。


(2-1):シート上に、フォームを表示するボタンを作る。 ----------


Visual Basic Editorの画面を使わずに、シート上にボタンを作って、クリックするとフォームを表示するようにします。この部分の操作は、通常のExcelシートで行います。
2105

【2-1-1】シートの上にボタンを作る

Excelのデータシートを表示しておいてください。ボタンの作り方はいろいろありますが、ここでは、好きな図形を作ってボタンにすることにしました。
1) データの上に、2行挿入します。(1行はボタン用。もう1行は説明用)
2) [挿入]-[シェイプ]で、好きな図形を選んで好きなサイズにします。
2101
3)ボタンにテキストを追加するなど、見た目をわかりやすくします。(プログラムではなくビジュアルの話なので、ここでは簡単に)
 ・テキストの追加…ボタンを右クリックして、[テキストの編集]
 ・文字の調整…ボタンを右クリックして[サイズとプロパティ]-[テキストボックス]
 ・文字色など…ボタンを右クリックして[スタイル]
2102

【2-1-2】ボタンに、作ったプログラム(プロシージャ)を登録する

1) ボタンを右クリックして、表示されるメニューから「マクロを登録」
2103
2) マクロ(プロシージャ)の登録画面が出るので、前回作った「edit_data」をクリックして[OK]
2104
※ 結果、ボタンの上のマウスカーソルが指に代わり、クリックすると、フォームが表示されるようになります。
※ 後ほど、[閉じる] ボタンを作ります。今はフォーム右上のボタンで閉じてください。



(2-2):フォームに、データ内容を表示する ----------

ここから、またVisjual Basic Editorに戻ります。

【2-2-1】 ユーザーフォーム(UserForm1) にコードを書きます

※ 前回は、標準モジュールのModule1に書きました。
今回は、フォームのUserForm1に書きます。
1) UserForm1のコードエディタを表示する
 3つ操作を書きますが、どの方法でも構いません。
 操作その1)プロジェクトエクスプローラのUserForm1を選択して、[表示]-[コード]
 操作その2)プロジェクトエクスプローラのUserForm1を選択して、F7を押す
 操作その3)プロジェクトエクスプローラのUserForm1で右クリックして、「コードの表示」
2201
2202

 コードエディタが表示されます。何かプロシージャが書かれていたら、削除してください。空の状態で始めます。
2204

2) フォームを立ち上げた時に動かす、特殊なプロシージャを書きます。VBAで決まっている書き方です。
UserForm_Initialize。日本語でいうと 「ユーザーフォームの、最初の設定をする」 です。

Private Sub UserForm_Initialize()

End Sub
※ 説明
 ・ユーザーフォーム … UserForm (これは、ユーザーフォームの名前UserForm1ではなく、フォーム自体のことです。)
 ・最初の設定をする=初期化する … Initialize
 ・フォームに固有のプロシージャなので … Private Sub
※ 補足) 手入力せずに書く方法
 1. [オブジェクト]を 一番下のUserForm にします。
2205
2206
 2. Private Sub UserForm_Click() とEnd Sub が表示されますが、そのままにしておきます。
 3. [プロシージャ] を Initialize にします。
2207
 4. Private Sub UserForm_Initialize() と End Sub が表示されます。
2で表示された2行は不要なので、削除してください。
2208

※これで、データ表示のプログラムを書く準備ができました。

3) 5行目のデータを、フォームに表示する
書きたい日本語は、
「TextBox1」の値に、ワークシート「Sheet1」のセル5行1列の値を入れる
このまま、コード (プログラム)にします。
TextBox1.Value = Worksheets("Sheet1").Cells(5, 1).value
※ この「=」は、「 1 + 2 = 3 」の場合の「等しい」という意味ではありません。

  「 a = 5 (aに5を代入する)」の場合と同じで、「代入」する、という意味です。
TextBox1 … テキストボックスの名前です。(自動でつくのでそのまま使いました)
Value … 値
ワークシート「Sheet1」 … Worksheets("Sheet1") ※WorksheetではなくWorksheets
セル5行1列 … Cells(5, 1)  ※CellではなくCells
順に、「 . 」(ドット)でつなぎます。

Private Sub UserForm_Initialize()

    TextBox1.Value = Worksheets("Sheet1").Cells(5, 1).Value

End Sub

※ コードが入力できたら、シートのボタンをクリックしてフォームを立ち上げてください。
※ 5行1列のデータが「No」のテキストボックスに表示されています。
2231

残り、5個のテキストボックスも表示させましょう。

Private Sub UserForm_Initialize()

    TextBox1.Value = Worksheets("Sheet1").Cells(5, 1).Value
    TextBox2.Value = Worksheets("Sheet1").Cells(5, 2).Value
    TextBox3.Value = Worksheets("Sheet1").Cells(5, 3).Value
    TextBox4.Value = Worksheets("Sheet1").Cells(5, 4).Value
    TextBox5.Value = Worksheets("Sheet1").Cells(5, 5).Value
    TextBox6.Value = Worksheets("Sheet1").Cells(5, 6).Value
    
End Sub
※ このコードは、同じパターンが綺麗に並んでます(変わっているのは、1~6の数字だけ)。PartIで一通り完成させた後、PartIIでこの部分をかきかる予定です。
※結果は 以下のようになります。
2232

※ 続きはまた今度。「[閉じる]ボタンを作る」と「クリックした行を表示させる」の予定です。
※ ここまでのデータは、こちらからダウンロードできます。(リンクを右クリックして保存)

続きはエクセルにフォームをつける Part I(03)




0 件のコメント:

コメントを投稿

youtubeへのリンクテスト

● youtubeのダウンロード