Excel VBA ユーザーフォーム 使い方 part1

はじめに

Excel VBA のUserFormの使い方を解説する。素材はデータベース。

目標とするUserFormは次の3つになる。

左からメイン、新規入力用、削除用のUserForm

ここでは、UserFormの使い方の解説が主目的であり、データベース自体は貧弱なものになっている。データベースの実用性を考えた場合、さらにUserFormの部品を追加する必要があるが、ここでの解説が理解できれば、難しいことはないと考える。

VBAでマクロプログラミングを行う際の注意点、プログラム作成の解説はその都度行うことにする。

下準備

Excelメニューで「開発」を表示させることから始める。

Excelメニューで「ファイル」>「その他」>「オプション」>「リボンのユーザー設定」をクリックし、
表示画面で「開発」にチェックを入れてOKを押せば、Excelメニューに開発が表示される。

開発がExcelメニューに表示されたもの

開発のクリック

開発をクリックすると以下の画面が表示される。

開発の画面

シートへコマンドボタンを配置する

マクロをキックさせる場合、F5キーを押すのはいただけない。F5キーはマクロプログラミングをしているときに使うものであり、実際に動かす場合は、シートにコマンドボタンを埋め込んでそれをクリックする。

やり方は挿入の矢印をクリックして一番上の左端をクリックする。このとき、ALTキーを押しながら挿入するとセルと一致する。

フォームコントロールのコマンドボタンを選択する

ここで、注意することはActiveXボタンに絶対に触れないことである。これはフォームコントロールとは別物であり、システムに影響を与えるものなので、よほどの腕がなければ、触れてはいけない。

この画面がでたら、OKを押す。ALTキーを押しながら✙の印を離すとセルにしっかりはまる。うまくいかない場合は〇印が表示されるのでALTキーを押しながら微調整をする。

このような画面になる。

ここで、ボタン1では恰好が悪いので、たとえば「実 行」とか自分の好きな名前に変更する。

変更の仕方は、〇印で囲まれている状態で右クリックして、delキーを押して、ボタン1を消してからテキストの編集を選択し、好きな名前を入力する

ここでは実行に変更した

これでマクロが登録できる状態になったのだが、これに登録できるマクロは標準モジュールで作ったものだけである。

セルの他の部分をクリックして、〇印を消してから、再度開発をクリックして、マクロを作成する。

ユーザーフォーム1の作成

開発をクリックして、一番左端のビジュアルベーシックを押すと、殺風景な画面が出てくる。

何もない画面が出てくる

ここで、上の左端の左から2番目の矢印を押すとメニューが出てくる

ユーザーフォームをクリックする

このような画面になる。

ここにコントロールからオプションボタンとコマンドボタンの2種類をユーザーフォームに配置する。オプションボタンは3つ、コマンドボタンは2つである。

配置の仕方は選択してドラックし、ユーザーフォーム上にドロップすればいい。

配置がし終わったユーザーフォーム

ここで、名前を変更する。

変更の仕方は、各ボタンを選択すると(左クリック1回)、左端の下にプロパティ〇〇と出てくるので、そこのCaptionにボタンの名前を書く。

オプションボタン1をプロパティ画面のCaptionで新規に変えて、大きさを小さくしたもの

同様の操作を、オプションボタン2、オプションボタン3、コマンドボタン1、コマンドボタン2でそれぞれ名前をつけて、見栄えが良くなるように大きさを変える。

出来上がったユーザーフォーム1

ここでF5を押すと、エクセルのシートにユーザーフォーム1が表示される。

右上の×印をクリックすると、もとの画面に戻る

 

画面左端の上のプロジェクトのフォームの下にあるUserForm1を右クリックしてコードの表示をクリックする

このような画面になる。

ここで、Option Explicit というのは、宣言した変数以外は使えないという宣言であり、必ずつけるようにしてほしい。

つけ方は、ツール>オプション>変数の宣言を強制する、にチェックを入れる。最初の画面では出てこないので、この操作をしてからもう一度、UserForm1のコードを選択すれば自動的についてくる。

その下に、Option Base1を追加で書いておく。これは配列の下限値を1に設定するもので、C言語系のものは0から始まるし、VBAも0から始まるが、シート番号やワークシートは1からはじまるなど、エクセル自体は1から始まるので、VBAのマクロプログラミングでは1に設定すべきである。

マクロプログラミング

Option Base 1 まで書き終わったらその下に、以下のコードをコピペする。

Private Sub CommandButton1_Click()
 
If OptionButton1.Value = True Then
    msgbox "aaa"
ElseIf OptionButton2.Value = True Then
    msgbox "bbb"
ElseIf OptionButton3.Value = True Then
    MsgBox "ccc"
    End If

End Sub

ここで、重要なことは、一行目のPrivate Sub 〇〇とEnd Subである。これは手書きとかコピペではなく、ユーザーフォーム1に配置したコマンドボタンをダブルクリックすることによって自動的に書かせるものである。ユーザーフォームで部品を活用する場合は必ず、部品をダブルクリックして書かせなければならない。

コマンドボタン2も同様に部品をダブルクリックして以下のコードをコピペする。

Private Sub CommandButton2_Click()
    Unload Me
End Sub

ここで、Me というのはVBAの用語で自分自身を表す。従って、Unload Me というのはユーザーフォーム1をloadしない、つまり自分自身を消すという意味である。

またUnloadというのもVBAの用語のひとつである。

ここまでできたら、F5を押しオプションボタンをおして、新規>実行>aaa、削除>実行>bbb、修正>実行>cccが出て、終了でフォームが消えることを確認すること。

セルのコマンドボタンにユーザーフォーム1をキックさせる

標準モジュールの画面を開く。

左上の左端から2番目の矢印をクリックして標準モジュールをクリックする

以下のコードをコピペする。今度は自分で作るものなので、Option Explicit 以外はそのままコピペしてOK。

Option Explicit
Option Base 1

Sub actionButton()
 UserForm1.Show
End Sub

コピペし終わったら、エクセルのシートを表示して、コマンドボタンを右クリックする。

マクロの登録をクリックする

この画面がでたら、いま作ったactionButtonをクリックする

この画面になったら、OKを押す

セルの何もないところをクリックしてコマンドボタンの〇印を消してから、実際にコマンドボタンを押す。

先ほどと同様にユーザーフォーム1が現れて、各オプションボタンを押して正常に動くことを確認する。

以上で、セルに埋め込んだコマンドボタンへの登録は終了である。

サイトご利用方法

次のページ・前のページを利用するよりも、グローバルメニュー(ヘッダー部分にある項目)・サブメニュー記事の項目をクリックしていただければ、その項目の全体像が一目でみることができ、クリックすればそのサイトへ飛びます。

google、yahoo、Bingなどで検索する場合、検索ワードは先頭に、孤立じじい、と入力しその後に、グローバルメニュー・サブメニュー記事のどれかひとつの項目を入力すると、その検索サイトが上位表示されます。