【実践1-2】同一Excelブック内のシートからSQLでデータを取得する

【実践1】で紹介するプログラムを完成させると次のような処理が可能になります。

続きとなる【実践1-2】では、少しプログラミングにも触れつつ、ユーザーフォームの作成をメインで説明しています。それぞれの役割とひも付きに注意しながら、進めてみましょう。

2. 視覚からはじめよう!ユーザーフォーム作成

Excelのプログラミングでは、「ユーザーフォーム」という自由にカスタマイズできるポップアップ画面が作成できます。いきなりコードを書いても、イメージできないので、まずは視覚的にプログラムと画面のつながりを確認していきましょう。

次の画面が、作成した「ユーザーフォーム」です。

用意されたパーツを組み合わせるだけなので、比較的簡単に作成できます。

Excelの図形に「マクロの登録」という機能があります。この機能を活用し、

 「Excelの図形」をクリック 
  ⇒ 「マクロの登録」記載のプログラム(標準モジュール)を呼び出す
   ⇒ 「標準モジュール」で「ユーザーフォーム」起動プログラムが実行される
    ⇒ 「ユーザーフォーム」が表示される

という流れで、結果的に

 「Excelの図形」をクリック ⇒ 「ユーザーフォーム」が表示される

とひも付きます。例えば、吹き出しにひも付けたり、写真にひも付けることも可能です。アイデアしだいで様々なカスタマイズが可能なので、いろいろ試してみましょう。

では、具体的に図形を「ユーザーフォーム」にひも付けるために、以下のステップに取り組んでいきましょう。

  1. 図形を挿入する。
  2. 図形の「マクロの登録」で“標準モジュール”というプログラムの集まりをひも付ける。
  3. ユーザーフォームを作成する。
  4. “標準モジュール”にユーザーフォームを呼び出すプログラム(ユーザーフォーム名.show)を追加する。

実際の画面と処理の内容を次の図にまとめてます。全体像をイメージしながら、次のステップに進みましょう。

2-1. プログラム(マクロ)をひも付けるボタン(オブジェクト)の作成

マクロ! オブジェクト(オブジェクトは、セルに関係ない図形やグラフの総称)!

と書かれているので、すごく難しいタイトルに見えますが、Excelシート上に図形を追加するだけです。後々、その図形にマクロ(複数の処理を1つのコマンドにまとめたもの)を登録することをひも付けと書いています。ステップで言うと赤線の部分です。

  1. 図形を挿入する。
  2. 図形にの「マクロの登録」で“標準モジュール”というプログラムの集まりをひも付ける。
  3. ユーザーフォームを作成する。
  4. “標準モジュール”にユーザーフォームを呼び出すプログラム(ユーザーフォーム名.show)を追加する。

さっそく、ボタン(オブジェクト)を追加していきましょう!

  • STEP1
    図形を挿入する

    画面上部の「挿入」タブ >「図」>「図形」を順番に選択して、角丸の四角形を挿入します。

  • STEP2
    図形のスタイルを変更する

    挿入した図形を選択し、「図形の書式」タブ >「図形の効果」>「標準スタイル」の順に選びます。

  • STEP3
    図形の色を変更する

    色も選びましょう。

    「図形の書式」タブ >「図形の塗りつぶし」>「塗りつぶしの色」>「色の設定」画面から目当ての色を選びましょう。

    枠線も同様です。「図形の書式」タブ >「図形の枠線」>「塗りつぶしの色」>「色の設定」画面から目当ての色を選びます。

    ボタンっぽく見えれば、形状や色はなんでも良いです。今回は少し立体的な形と淡い緑にしてみました。このカスタマイズは自由自在です。Excelの強みかもしれませんね。

    色やデザインでテンションがあがる人は、自分のお気に入りのデザインを作ってみてください。プログラミングへのモチベーションが下がらないことが大切です。

  • STEP4
    枠線を非表示にする

    あとは、枠線が不要なので、枠線を外しておきましょう。「ページレイアウト」タブ >「枠線」の「表示」のチェックを外します。

  • STEP5
    ボタンに文字をいれる

    ボタンに「仕入データ検索」と記載し、「メニュー」シートに配置して完成です。

2-2. ボタン(オブジェクト)にプログラム(マクロ)をひも付ける

ここからプログラミングっぽくなってきます。ボタン(オブジェクト)にプログラム(マクロ)をひも付けて、ボタンを押すとプログラムが実行されるようにしていきます。ステップで言うと赤線の部分です。

  1. 図形を挿入する。
  2. 図形にの「マクロの登録」で“標準モジュール”というプログラムの集まりをひも付ける。
  3. ユーザーフォームを作成する。
  4. “標準モジュール”にユーザーフォームを呼び出すプログラム(ユーザーフォーム名.show)を追加する。
  • STEP1
    「マクロの登録」をクリックする

    「仕入データ検索」ボタンを右クリック >「マクロの登録」をクリックします。

  • STEP2
    マクロ名とプログラムの紐づけを理解する

    「マクロ名」に〇〇_Clickと自動表示されます。この名前がプログラムとボタンを紐づける役割を果たします。後で変更できますが、この「マクロの登録」に記載したマクロ名とプログラム名が一致しないと紐づかなくなるので注意が必要です。

    突然、別の画面が表示されたと思います。この画面はVBEというVBAを作成、編集するためのツールになります。この画面に先ほど登録したマクロ名で、

      Sub 〇〇_Click()
        
      End Sub

    と何やら自動で作成されていることが分かります。

    このの部分がボタンをクリックした時に呼び出される処理になります。そして、〇〇_Clickがボタンと紐づくキーになります。ちなみに記載のように〇〇_Clickの_Clickは動作を意味します。ここでは、クリックした時の動作ということです。

  • STEP3
    ボタンとプログラムの紐づけを確認する

    本当に処理されるのか、簡単なプログラムを作成してみましょう。

    以下のプログラムをSub 〇〇_Click() End Subのの部分に記入してみてください。このプログラムは、「表示されるかな?」と書かれたメッセージボックスを表示するものです。

    MsgBox "表示されるかな?"
  • STEP4
    動作を確認する

    「仕入データ検索」ボタンをクリックしてみてください。ポップアップが表示されたら、クリックという動作と紐づいた MsgBox “表示されるかな?” が呼び出されたということです。

ポップアップが表示されましたか?

小さなことですが、想像していることが目の前で実現できるとテンションあがりませんか⁉難しく考えず、小さなことを少しずつ積み上げていきましょう。

表示されなかった人は、ひもづける名前(〇〇_Clickなど)が間違っていないか再度確認してみてください。

2-3. ボタン(オブジェクト)にひもづけるユーザーフォームを作成する

先ほどは、簡易なポップアップを表示しましたが、この動作で自作のユーザーフォームを表示します。ステップで言うと赤線の部分です。

  1. 図形を挿入する。
  2. 図形にの「マクロの登録」で“標準モジュール”というプログラムの集まりをひも付ける。
  3. ユーザーフォームを作成する。
  4. “標準モジュール”にユーザーフォームを呼び出すプログラム(ユーザーフォーム名.show)を追加する。
  • STEP1
    ユーザーフォームを挿入する

    VBEを開きましょう。Excel画面上部の「開発」タブを開き、「Visual Basic」を選択します。

    VBEが開いたら、画面に「プロジェクト -VBAProject」と表示されています箇所があります。ここは「プロジェクトエクスプローラー」という箇所です。この範囲であればどこでも良いので、右クリックして「挿入」>「ユーザーフォーム」を選択しましょう。

  • STEP2
    挿入された“UserForm1”を確認する

    「プロジェクトエクスプローラー」に“UserForm1”が挿入されます。

    後ほど、このUserForm1が「仕入データ検索」ボタンのクリックで呼び出されるようにします。

  • STEP3
    画面配置を整理する ※省略可

    ユーザーフォームを好みの表示にカスタマイズしていきましょう。

    その前に操作がしやすいように画面配置を変えます。

    先ほど使用した「プロジェクトエクスプローラー」や下画面の「プロパティ」は簡単に移動できます。タイトル部分をクリックしたまま、マウスを動かしてみましょう。

    「プロパティ」が幽体離脱のように白透明で表示されます。

    「プロジェクト」のタイトルあたりでドラッグをやめると「プロジェクト」と「プロパティ」の配置が入れ替わります。

    「プロパティ」画面が「プロジェクト」画面のサイズに縮小されるので、引き伸ばして見えやすくしましょう。

    ユーザーフォームを作成していく際、右側のユーザーフォーム本体を直接さわります。ただ、細かい位置の調整や色、制限に関しては、「プロパティ」で変更していきます。

  • STEP4
    ユーザーフォームをカスタマイズする

    では、ユーザーフォームを作成していきましょう。

    各項目は、英語で表示されているので分かりにくいかもしれません。一例として、以下のような設定があります。

    なお、これらの設定は、プログラムで変更したり、中身を取得したりできます。その際、重要になってくるのが「オブジェクト名」です。「オブジェクト名」は後ほどユーザーフォームを呼び出す際にも使用します。

    今回は、ユーザーフォームの設定を次のように変更しています。

    「プロパティ」の設定変更は、ダイレクトに右のオブジェクト画面に反映されます。

2-4. ユーザーフォームにコントロールを配置する

ユーザーフォームをカスタマイズする際、Excelには「ツールボックス」と呼ばれるパーツの集まりが用意されています。この「ツールボックス」に用意されたコントロール(ラベルやテキストボックスなど)を配置することで、簡単にユーザーフォームが作成できます。

そして、配置したコントロールは、「プロパティ」で文字色やサイズ、入力制限などを自由にカスタマイズできます。では、コントロールを追加してみましょう。

  • STEP1
    「ラベル」コントロールを追加する

    早速、「ラベル」から追加していきます。「ラベル」は項目のタイトルなどに使用します。応用として、プログラムで表示内容を変えることも可能です。

    ちなみに、プロパティの(オブジェクト名)と記載された名称は、このラベルを特定するためのIDで他のコントロールと被ってはいけません。本当は、複数人でプログラミングする場合などを考えて、オブジェクト名を統一して管理した方が良いのですが、ここでは使用するコントロールのみ(テキストボックスなど)に名前を付けています。それ以外は、デフォルトのまま使用します。

  • STEP2
    フォントを変更する

    フォントは、プロパティの…をクリックすると、Excel標準のフォント設定が表示されます。好みのフォント名やサイズに設定しましょう。

  • STEP3
    「テキストボックス」コントロールを追加する

    次にテキストボックスを設定します。ラベルと同じようにテキストボックスを追加しましょう。

    テキストボックスの値は、検索条件として使用します。そのため、識別名はプログラム内で使用することを考え、分かりやすい表示にしましょう。

    ここでは、「txt_Start_Date」としています。txtでテキストボックスを表し、自分で分かるように英単語を使用しています。文字間の空白は_(アンダーバー)で埋めています。

    なお、VBAは日本語名も使用できます。その方が分かりやすいですが、VBA以外のプログラミングも挑戦する方は、英語表記などで統一しておいた方が楽かもしれません。

    余談ですが、図の「⑤入力文字数を制限」や「⑥初期値を設定」を使用すれば、テキストボックスの入力を制御できます。一般的にバリデーションと呼ばれるものです。用途にあわせて、“〇文字しか入力させない”とか“数字のみ入力許可”といった制限がかけられます。

    バリデーションはプロパティを使わず、プログラムで制御することもできます。プログラムの方ができる幅が広いので、慣れてきたらプログラムで制御することをおすすめします。

  • STEP4
    基準となるコントロールを複製する

    1つ基準となるコントロールの設定ができたら、それをコピーします。

    ユーザーフォームの貼り付けたい箇所を右クリック>「貼り付け」でテキストボックスがコピーできます。

    コントロールをコピーして作成すると、コピー元のサイズや色、制限などを引き継ぎます。

    ただし、(オブジェクト名)はユーザーフォーム内で被ってはいけないので、“TextBox1”など初期値が設定されます。そのため、何でも良いので、識別できる名前を付けましょう。

2-5. ユーザーフォームに使用するコントロールを全配置する

一通り、コントロールの説明は終わったので、本格的にユーザーフォームを仕上げていきましょう。

  • STEP1
    「ラベル」を作成する

    先ほど説明したコピー&ペーストで、「ラベル」を追加していきます。作成済みの「ラベル」をコピーして、貼り付けます。必要に応じて、プロパティを変更しましょう。

  • SETP2
    「テキストボックス」を作成する

    次は、「テキストボックス」を追加していきます。ラベルと同じようにコピペで複製していきます。

    オブジェクト名はプログラム内で使用するので、分かりやすい名前にしましょう。“IMEMode”で入力時の初期設定ができます。あくまで初期設定なので、ユーザ側で切り替えることも可能です。

    ※数字のみ入力可能(切り替えさせない)にする場合、プログラムと組み合わせる必要があります。

  • SETP3
    「チェックボックス」を作成する

    「チェックボックス」を作成していきます。初めて使用するコントロールなので、ツールボックスから挿入します。今回は、“仕入先”、“商品名”のテキストボックスに入力された文字であいまい検索したい時に使用します。

    プログラム内で使用するので、分かりやすいオブジェクト名をつけておきましょう。

  • STEP4
    「コマンドボタン」を作成する

    こちらも初めて使用するコントロールなので、ツールボックスから挿入します。プログラム内で使用するので、こちらにも分かりやすいオブジェクト名をつけておきましょう。

  • STEP5
    「プログレスバー」を追加する。

    プログレスバーは、処理の進捗状況を視覚的に表現したものです。初期設定ではツールボックスに入っていないので、追加しましょう。

    ツールボックスを右クリックし、「その他のコントロール」をクリックします。「コントロールの追加」画面が表示されるので、「Microsoft ProgressBar~」にチェックを入れて、「OK」をクリックしましょう。

    ちなみに、プログレスバー以外にも多くのコントロールが用意されています。必要に応じて追加可能です。

  • STEP6
    「プログレスバー」を作成する

    追加したプログレスバーをツールボックスから貼り付けます。後ほどプログラム内で使用するので、オブジェクト名を設定しておきましょう。

お疲れ様でした。これでユーザーフォーム画面は完成です。手数は多いですが、それほど難しいところはなかったのではないでしょうか。

このユーザーフォームとプログラムがどのように結びついていくのか、次のステップを楽しみにしてください。

2-6. ユーザーフォームを呼び出すプログラムを追加する。

作成したユーザーフォームをプログラム(標準モジュール)から呼び出す仕組みを追加していきましょう。ステップで言うと赤線の部分です。

  1. 図形を挿入する。
  2. 図形にの「マクロの登録」で“標準モジュール”というプログラムの集まりをひも付ける。
  3. ユーザーフォームを作成する。
  4. “標準モジュール”にユーザーフォームを呼び出すプログラム(ユーザーフォーム名.show)を追加する。
  • STEP1
    標準モジュールを挿入する

    ユーザーフォームを呼び出すために、“標準モジュール”というプログラムの集まりを作成します。作成方法を2つ紹介します。

    • 「マクロの登録」から「新規作成」で挿入する。
    • VBEの「プロジェクトエクスプローラー」で挿入する。

  • STEP2
    「マクロの登録」から「新規作成」で挿入する

    こちらの方法は、1度紹介していますが、復習しましょう。Excelに挿入した図形は、右クリックすると、「マクロの登録」項目が表示されます。これをクリックします。

    「マクロの登録」画面が表示されます。

    「マクロ名」に〇〇_Clickと自動表示されます。この名前がプログラムとボタンを紐づける役割を果たします。後で変更できますが、この「マクロの登録」に記載したマクロ名とプログラム名が一致しないと紐づかなくなるので注意が必要です。

    ここでは、とりあえず「新規作成」をクリックします。

    するとVBE画面が表示され、標準モジュールに“Module1”が挿入され、その中身に、

      Sub 四角形を丸くする3_Click()
        
      End Sub

    と何やら自動で作成されていることが分かります。

    このの部分がボタンをクリックした時に呼び出される処理になります。そして、四角形を丸くする3_Clickがボタンとひもづけるキーになります。ちなみに記載のように〇〇_Clickの_Clickは動作を意味します。ここでは、クリックした時の動作ということです。

    今回は標準モジュール名を「M01_Search_Purchase」と変更してください。そして、“四角形を丸くする3_Click()”を「M01_Search_Purchase_Click()」と変更します。

    忘れてはいけないのは、「マクロの登録」側も変更してあげないと標準モジュールとひも付かないということです。

    マクロ名を指定するには、以下2つの記載方法があります。

    • ファイル名.xlsm!標準モジュール名.モジュール名でひも付ける
      例)【実践1】同一Excelブック内のシートからSQLでデータを取得する.xlsm!M01_Search_Purchase.M01_Search_Purchase_Click
    • ファイル名.xlsm!モジュール名
      例)【実践1】同一Excelブック内のシートからSQLでデータを取得する.xlsm!M01_Search_Purchase_Click

    標準モジュール名は省略できるようですが、複数の標準モジュールを扱うようになると、どこからひも付いているか分からなくなるので、個人的には、標準モジュール名.モジュール名をおすすめします。

  • STEP2
    VBEの「プロジェクトエクスプローラー」で挿入する

    もう一つの方法は、VBEで追加する方法です。

    赤枠の「プロジェクトエクスプローラー」内であれば、どこでも良いので右クリック >「挿入」>「標準モジュール」をクリック。

    “Module1”というデフォルト名で標準モジュールが追加されるので、「プロパティ」画面で名前を“M01_Search_Purchase”に変更する。

  • STEP3
    “M01_Search_Purchase”の中身を作成する

    細かい説明は、後ほどします。

    とりあえず、“「マクロの登録」から「新規作成」で挿入する。”を実施するとモジュールの中身が自動で作成されます。このSub ~ End Subの間に「ユーザーフォーム」を呼び出すプログラムを記載します。

    事前に作成したユーザ-フォームのオブジェクト名を使用して、

      F01_Search_Purchase.Show

    と記載すれば、ユーザ-フォームを表示する準備は完了です。

ここまで、画面が多いので、複雑そうに見えます。

しかし、オブジェクト名を使用して、ユーザ-フォームを呼び出すためのひも付けを行っているだけと考えるとプログラムと言えるものは画面を呼び出す“F01_Search_Purchase.Show”だけです。

  1. 図形を挿入する。
  2. 図形にの「マクロの登録」で“標準モジュール”というプログラムの集まりをひも付ける。
  3. ユーザーフォームを作成する。
  4. “標準モジュール”にユーザーフォームを呼び出すプログラム(ユーザーフォーム名.show)を追加する。

このユーザーフォームを呼び出すまでのつながりを意識すると、あとは応用が利くと思います。