【ExcelVBA】食品成分表から検索→食品入力をしてみよう!【ユーザーフォーム】

Excel

「栄養計算ソフトにユーザーフォームを導入しよう」の連載第7回です。

以下の記事の続きになります。

【ExcelVBA】コードを読みやすいリーダブルコードに改善しよう!【ユーザーフォーム】
「栄養計算ソフトにユーザーフォームを導入しよう」の連載第6回。ExcelVBAのユーザーフォームを栄養計算ソフトに導入します。今回は読みにくいコードを改善し、リーダブルコードにする過程をご紹介します。。

前回は、コードを見直し、読みやすく・メンテナンスのしやすいように改善していきました。今回は、検索から食品を入力するためのフォームを作成していきたいと思います。

ではいきましょう。

コントロールを配置しよう

①フォームにコントロールを配置しよう

まずは、フォーム:「食品の入力|検索から」に、コントロールを配置していきます。以下のようにコントロールを配置してください

②コントロールにオブジェクト名とCaptionを設定しよう

それぞれのコントロールにオブジェクト名とCaptionを追加していきます。以下の表に従って行ってください。

オブジェクト名 Caption
①テキストボックス txtSerchBox
②オプションボタン btnSerch 検索する
③ラベル lblMsg (空白にする)
④リストボックス lstFood
⑤オプションボタン btnAdd 追加する

では、それぞれのコントロールの役割を説明します。
①テキストボックスは、食品を検索するためのテキストを入力するためのものです。
②オプションボタンは、①に入力されたテキストをもとに、検索を実行するためのものです。
③ラベルは、検索の結果(○件見つかったなど)を表示するためのものです。
④リストボックスは、検索の結果、見つかった食品を表示するためのものです。
⑤オプションボタンは、④で選択した食品をシートに追加するためのものです。

 

検索ボタンを押した際の処理を記述しよう

では、いよいよ検索ボタンを押した際の処理を記述していきます。

検索ボタンをクリックして、検索ボタンを押した際に実行されるプロシージャを表示させましょう。

以下のコードを記述してください。

実際にフォームを開き、リストボックスに食品が追加されること、ラベルにメッセージが表示されることを確認してください。

コードの解説

では、コードの解説をしていきます。

ここでは、serchWordを検索ボックスのテキストを格納するための変数としています。検索ボックスのテキストは、テキストボックスのTextプロパティから取得できます。

 

ここでは、本表の食品一覧に対して、検索ワードを含むものをリストボックスに追加しています。それには、InStr関数を活用しています。

IStr関数は、第2引数の文字列に対して、第3引数の文字列が何番目に含まれるかを返す関数です(第1引数は検索の開始位置なので1で構いません)。

つまり、本表の食品一覧に、検索ワードが含まれていれば、1以上の数字を、含まれていなければ0を返してくれます。1以上の数字が返された場合は、その食品に検索文字列が含まれるということになりますので、食品一覧に追加するための処理を行う、というわけなのです。

 

この部分では、検索した結果、何件の食品が見つかったかを、lblMsgに表示させています。見つかったかどうかは、lstFoodに追加されている食品の数で判断しています。つまり、食品が追加されていない場合は見つからなかった旨のメッセージを表示し、見つかった場合は見つかった食品の数にメッセージを結合して表示させています。lslFoodに食品が追加されたかどうかは、LstFoodのプロパティ:ListCountで取得しました。

 

食品を追加する処理を記述しよう

先ほどまでの処理で、食品を検索し、それをリストボックスに追加することができました。では、食品を追加するための処理を記述していきましょう。

以前のコードをコピペでOK!

でも、それは以前に作成した、食品群一覧から食品を追加するのと同じコードで実装できます。なので、それをそのままコピペしてしまいましょう。コードは以下のようになっていましたね。

 

実は、追加するためのボタンも、追加する食品を選ぶためのリストボックスもオブジェクト名は同じです。なので、特に変更する箇所もなく、コピペすることで簡単に処理を実装できます。

 

コードの全体を確認しておこう

これまでの連載で、かなり多くのコードを書いてきました。すこし複雑になってきましたので、ここで一度すべてのコードを公開しておきます。一度、確認しておいてください。

まずは食品群一覧から食品を入力するフォームに記述されているコードから。

 

次は、検索から食品を入力するためのフォームにかかれているコードです。

 

最後に、標準モジュールのModule1に記述されているコードです。ここではPublic定数を宣言していましたね。

 

しっかりと入力できていましたか?もう一度、確認してみてくださいね。

 

まとめ

今回は検索から食品を入力するための処理を実装しました。次回は、細かいエラー処理などを実装して、一応の完成としたいと思います。

 

連載目次

  1. ユーザーフォームを始める最初の1歩
  2. フォームを設置→開くをやってみよう!
  3. リストボックスからシートに食品を追加してみよう!
  4. オプションボタンから動的にリストボックスの内容を変更しよう!
  5. ユーザーフォームにエラー処理を実装しよう!
  6. コードを読みやすいリーダブルコードに改善しよう!
  7. 食品成分表から検索→食品入力をしてみよう!
  8. 栄養計算ソフト+ユーザーフォームの完成!DLも可