アプリ作成で学ぶ Excel VBAプログラミング ユーザーフォーム&コントロール
横山達大(著)
秀和システム
本の詳細
フォーム作成に関しては、多くの知識と技術が必要ですが、残念ながらそれを紹介している書籍はそれほど多くありません。VBAの初心者を対象としているあまり、どうしてもプログラミングの基礎的な知識とスキルの説明を重視するからでしょう。
しかし、フォームを活用してこそExcel VBAが活きるというのが筆者の考えです。ですから、VBAの初心者でもフォームを活用できるように、作成のポイントをわかりやすく順を追って説明しました。
本書で取り上げる売上げ管理システムを構築するというテーマは、一つのフォームでは実現できません。処理のまとまりごとにフォームを用意するので、全部で10以上ものフォームを作成する必要があります。繰り返しフォームを作成するうちに、フォーム作成のポイントを自然と理解していくでしょう。繰り返し登場するコードもいつの間にか理解できている自分に気づくでしょう。
また、たとえば検索用のフォームから選択した情報を別のフォームに詳しく表示するといったユーザーにわかりやすいフォームの使い方も学ぶことができます。単なるテクニックの紹介ではなく、全体の流れを実現するためにどのような場面でどのような手段があるのかを体験することができます。
Excel VBAは、ユーザーがExcel上で操作するほとんどの操作をプログラムで実現する機能を持っています。この機能を使うと、プログラマの負担が軽くなります。
たとえば、任意の条件でデータを抽出する作業は、コードを自分の力で一から書いていく方法もありますが、Excelの「フィルタオプションの設定」という便利な機能をそのまま活用して短くて簡単なコードで処理する方法もあります。本書でもこの方法を採用しています。Excelの機能を巧みに活用して、コードを書くテクニックも重要なのです。
本書では、上記のような内容についてアプリを作成しながら、無理なく理解できるように解説しています。それでは、Excel VBAの世界へと一緒に旅立ちましょう。
目次
Chapter1 売上管理システムの概要
1-1 全体像をイメージしよう
- 売上管理システムとは
- 全体像をイメージしよう
- 必要な項目を列挙しよう
- 売上情報とは何か
- 情報をグループ化しよう
- 顧客の住所や電話番号、FAXは必要?
- 顧客情報として管理するもの
- 商品情報として管理するもの
- 売上情報は、マスタ情報をうまく使うといい
1-2 完成品を確認しよう
- メニューフォームを用意する
- 商品マスタの登録画面
- 商品マスタの修正/削除画面
- 顧客マスタの登録画面
- 顧客マスタの修正/削除画面
- 売上情報の登録画面
- 明細行の修正画面
- 売上情報の検索画面
- 売上情報の修正画面
- 請求書の指定画面
- 請求書の確認画面
- 会社情報の登録/修正画面
1-3 情報の格納方法を設計しよう
- Excelを起動して、ファイルを保存しよう
- 顧客マスタ情報を保存するシートを用意しよう
- 商品マスタ情報を保存するシートを用意しよう
- レコードとフィールドと主キー
- 売上情報を保存するシートを用意しよう
- 伝票ごとの情報をシートに保存しよう
1-4 今後の制作の準備をしよう
- 作業用のシートを用意しよう
- 開発タブを表示しよう
Chapter2 「商品マスタ」の登録画面を作ろう
2-1 Visual Basic Editorを起動しよう
- VBAはこのVisual Basic Editor上で作業する
- Visual Basic EditorからExcel画面への切り替え
- Excelを保存すると一緒に保存される
2-2 ユーザーフォームを作成しよう
- ユーザーフォームを作成しよう
- ツールボックス
- プロジェクトエクスプローラ
- ユーザーフォームの名前
- ユーザーフォームはいくつでも作成できる
- ユーザーフォームの作成
- ユーザーフォームの確認
- ユーザーフォームを削除してみよう
- ユーザーフォームの削除
2-3 コントロールを追加しよう
- コントロールの追加方法は、こんなにも簡単
- 「テキストボックス」の配置
- ツールボックスにはコントロールがたくさん用意されている
- よく使うコントロールを追加してみよう
- テキストボックスの追加
- ラベルの追加
- ラベルの編集
- コントロールを削除してみよう
- コントロールをコピーしてみよう
- 複数のコントロールを選択しよう
2-4 コントロールを見栄えよく配置しよう
- 使いやすいように整然と配置しよう
- 整然と配置するための方法
2-5 コントロールの設定をしよう
- Visual Basic Editorから表示してみよう
- フォームを表示する
- フォームを閉じてみよう
- 表示したフォームに入力してみよう
- コントロールの設定はプロパティを使う
- コントロール名をきちんとつけよう
- コントロールの名前はオブジェクト名に設定する
- フォームの大きさを設定しよう
- ラベルの表示文字列を変更しよう
- ラベルの大きさを自動調整
- テキストボックスの名前を変更しよう
- コントロールのIMEモードを設定しよう
- 入力をコントロールできると便利
- テキストボックスの幅を設定しよう
- 単位のラベルとテキストボックスを追加しよう
- コンボボックスを追加しよう
- タイトル部分を作成しよう
- ラベルで図形風に
- ラベルのプロパティ設定
- 直線をラベルコントロールで作成しよう
- ラベルのプロパティ設定
- リストボックスを追加しよう
- コマンドボタンを追加しよう
- 残りのラベルを追加しよう
- カーソルの遷移の順番を設定しよう
- ここまでのまとめ
Chapter3 プログラムを書いてみよう
3-1 フォームを閉じてみよう
- ボタンをクリックしたらフォームを閉じる
- プロシージャのルールを確認しよう
- コードの解説
- フォーム画面とコード画面は表裏一体
3-2 フォームを表示してみよう
- Excel上からフォームを表示できるようにしよう
- 標準モジュールに書くことがポイント
- シート上にボタンを追加しよう
- コードの解説
3-3 コントロールの値をシートに書き込もう
- シートの確認をしよう
- テキストボックスとコンボボックスの値をシートに書き込む
- コードの解説
3-4 とにかく変数を使ってみよう
- 商品情報を追加できるようにしよう
- 追加すべき行を自動的に取得しよう
- コードの解説
3-5 条件分岐を体験しよう
- 入力チェックをしよう
- コードの解説
3-6 リストボックスを制御しよう
- 登録済みのデータを表示してみよう
- リストボックスにデータを表示しよう
- コードの解説
- リストボックスの構造を理解しよう
- 登録直後のリストボックスを更新しよう
- データを追加してみよう
Chapter4 メニュー画面を作ろう
4-1 コントロールを配置しよう
- フォームを新規作成しよう
- タイトル部分をラベルで作成しよう
- フレームを2つ配置しよう
- エリアとしてのラベルを追加しよう
- コマンドボタンを配置しよう
- Excelからフォームを表示してみよう
- 終了ボタンで閉じてみよう
- シート上のボタンの文字列を変更しよう
4-2 フォームからフォームを起動する
- ボタンクリックでフォームを表示してみよう
4-3 日付と時刻を表示しよう
- 日付の関数を使ってみよう
- コードの解説
4-4 ファイルを開いた時にフォームを表示しよう
- ファイルを開くときには、Workbook_Openイベントが発生する
- コードの解説
- コメントアウトを覚えよう
- 終了ボタンでExcelを終了してみよう
- コードの解説
- 終了処理をコメントアウトしよう
- ファイルを開くとフォームだけが表示されるようにしよう
- コードの解説
Chapter5 プログラムの基礎を確認しよう
5-1 オブジェクト、プロパティ、メソッド
- オブジェクトとは
- オブジェクトは階層構造を持つ
- プロパティは、オブジェクトの性質を表す
- プロパティを設定するには
- プロパティを取得するには
- メソッドは、動詞のようなもの
- 引数を必要とするメソッドがある
- では、Worksheets.Add Worksheets(1)とは?
5-2 変数と定数
- 変数とは
- 変数にはデータ型がある
- 変数の命名上の注意
- 定数とは
- 変数の適用範囲(スコープ)
- 変数の有効期間
- 配列変数について
- 変数を宣言しないと使用できないようにする方法
5-3 繰り返し処理は、プログラミングの花形スター
- もし、繰り返し構文を使わずに書くとすれば
- 繰り返し構文を使えば簡単に解決できる
- For…Nextステートメントの解説
- For Each…Nextステートメントの解説
5-4 条件分岐を覚えよう
- プログラムの処理は、わずか3つに大別される
- 条件分岐にはいくつかのタイプがある
- 比較演算子を確認しよう
- 条件式の意味を確認しよう
- Not演算子は否定を表す
5-5 デバッグを覚えよう
- エラーが発生したときの対処方法
- デバッグを活用しよう
- ブレークポイントを使おう
5-6 関数を使いこなそう
- 予め用意されている関数を活用しよう
- オリジナル関数を作ってみよう
- 値渡しと参照渡し
Chapter6 「商品マスタ」の修正/削除フォームを作ろう
6-1 コントロールを配置しよう
- ユーザーフォームを新規作成しよう
- コピーを活用してコントロールを追加しよう
6-2 データを修正する処理を書こう
- 処理の流れを確認しよう
- フォームの表示時にリストボックスに商品情報を表示する
- 「閉じる」ボタンでフォームを閉じよう
- リストボックスのデータをテキストボックスに表示しよう
- With構文を使ってみよう
- コードの解説
- データの修正時に、商品IDを変更できないようにしよう
- Enabledプロパティを使う
- Lockedプロパティを使う
6-3 メッセージボックスを有効活用しよう
- MsgBox関数を使ってみよう
- コードの解説
- 条件分岐を使って、処理を分けよう
- リストボックスのデータを修正しよう
- コードの解説
- シートの情報を書き換えよう
- コードの解説
- 各コントロールの値をクリアする
6-4 「削除」ボタンの処理を書こう
- 削除の処理の流れを確認しよう
- 削除の確認用メッセージボックスを表示しよう
- コードの解説
- 削除の処理を書こう
- コードの解説
- 表示した時点では、ボタンを無効にしておこう
- リストボックス内のデータを選択したらボタンを有効にしよう
- 削除したデータをリストボックスに読み込まないようにしよう
Chapter7 「顧客マスタ」の登録フォームを作ろう
7-1 コントロールを配置しよう
- フォームを追加しよう
- コントロールを追加しよう
7-2 読み込み時の設定をしよう
- 既に登録されている顧客情報をリストボックスに表示しよう
- コードの解説
7-3 「登録」ボタンの処理を書こう
- 処理の内容を確認しよう
- コードを書こう
- コードの解説
- 「閉じる」ボタンの処理を書こう
- メニューフォームのボタンからこのフォームを表示しよう
- シート上のデータをテキストファイルにエクスポートする
Chapter8 「顧客マスタ」の修正/削除フォームを作ろう
8-1 コントロールを配置しよう
- フォームを追加しよう
- コントロールを追加しよう
8-2 読み込み時の設定をしよう
- 処理の内容を確認しよう
- 既に登録されている顧客情報をリストボックスに表示しよう
- コードの解説
- 「修正」「削除」ボタンを使用不能にしておこう
8-3 選択された顧客情報をテキストボックスに表示しよう
- 処理の概要を確認しよう
- コードを書こう
- コードの解説
8-4 「修正」ボタンの処理を書こう
- 処理の概要を確認しよう
- リストボックスとシートの値を更新するコードを書こう
- コードの解説
- テキストボックスの値をクリアしよう
- コードの解説
8-5 「削除」ボタンの処理を書こう
- 処理の概要を確認しよう
- コードを書こう
- コードの解説
Chapter9 「売上情報」の登録フォームを作ろう
9-1 コントロールを配置しよう
- フォームを追加しよう
- コントロールを追加しよう
- タブオーダーを設定しよう
9-2 読み込み時の設定をしよう
- フォームの初期化時に行うべきことを整理しよう
- 「閉じる」以外のボタンを使用不能にしよう
- 今日の日付を表示しよう
- 伝票Noを表示しよう
- 顧客IDコンボボックスにリストを設定しよう
- 商品IDコンボボックスにリストを設定しよう
- コードの解説
- リストボックスの初期設定をしよう
- 顧客名ラベルに、顧客IDの選択を促すメッセージを表示しよう
- 明細行のコントロールを無効にしよう
9-3 コンボボックスのリストを選択したときの処理を書こう
- 顧客IDを選択したときの処理を確認しよう
- コードを書こう
- コードの解説
- 商品IDを選択したときの処理を確認しよう
9-4 「明細行の追加」ボタンを使用可能にするコードを書こう
- 処理の概要を確認しよう
- コードを書こう
- コードの解説
- CheckEntry関数を作ろう
- コードの解説
9-5 金額、消費税、税込金額を計算して表示しよう
- 処理の概要を確認しよう
- コードを書こう
- コードの解説
- 同じコードを何度も書かなくて済むように工夫しよう
9-6 「明細行の追加」ボタンをクリックしたときの処理を書こう
- 処理の概要を確認しよう
- コードを書こう
- コードの解説
- 関数GetGoukeiKingakuを作成しよう
- コードの解説
- 引数のあるプロシージャを作成しよう
- コードの解説
- 明細行をキーボードだけで入力できるように工夫しよう
9-7 「登録」ボタンをクリックしたときの処理を書こう
- 処理の概要を確認しよう
- コードを書こう
- コードの解説
9-8 「明細行の削除」ボタンをクリックしたときの処理を書こう
- まず、「明細行の修正」「明細行の削除」ボタンを使用可能にしよう
- 処理の概要を確認しよう
- コードを書こう
- コードの解説
9-9 「明細行の修正」フォームを作成しよう
- 新規フォームを作成しよう
- コントロールを配置しよう
- コントロールのフォーカスの順序を設定しよう
- フォームの初期化処理を設定しよう
- 商品IDの値が変更されたときの処理を書こう
- 単価と数量の値が更新されたときの処理を書こう
- Public変数を宣言しよう
- 「変更を適用する」ボタンの処理を書こう
- コードの解説
- 「キャンセル」ボタンの処理を書こう
9-10 「明細行の修正」ボタンをクリックしたときの処理を書こう
- 処理の概要を確認しよう
- コードを書こう
- コードの解説
Chapter10 「フィルタオプションの設定」を理解しよう
10-1 「フィルタオプションの設定」を使ってみよう
- 「フィルタオプションの設定」のメリット
- 「フィルタオプションの設定」の概要
- 「フィルタオプションの設定」の操作方法
- 日付の期間指定を行って抽出してみよう
- さらに伝票番号を指定して抽出してみよう
10-2 重複データを省略して抽出する方法をマスターしよう
- 売上明細データから期間指定をして顧客名を抽出しよう
- 商品マスタに登録されている分類一覧を取得しよう
10-3 「マクロの記録」に挑戦しよう
- 「マクロの記録」とは、Excelが書いたプログラム
- 「マクロの記録」の操作方法
- プログラムの確認をしよう
- 抽出用のプロシージャを作成しよう
- コードの解説
10-4 並べ替えを使ってみよう
- ソートを使ってみよう
- ソートに対してマクロの記録を使ってみよう
- プロシージャを確認しよう
- コードの解説
Chapter11 「売上情報」の検索フォームを作ろう
11-1 コントロールを配置しよう
- フォームを追加しよう
- コントロールを配置しよう
- コントロールのフォーカスの順序を設定しよう
11-2 フォームの初期化処理を設定しよう
- 処理の内容を確認しよう
- コードを書いてみよう
- コードの解説
11-3 「検索」ボタンをクリックしたときの処理を書こう
- 処理の内容を確認しよう
- コードを書いてみよう
- コードの解説
11-4 基本情報リストボックスの行を選択したときの処理を書こう
- 処理の内容を確認しよう
- コードを書いてみよう
- コードの解説
11-5 ボタンをクリックしたときの処理を書こう
- 「選択されている伝票を編集する」ボタンをクリックしたときの処理を確認しよう
- コードを書いてみよう
- 「選択されている伝票を削除する」ボタンをクリックしたときの処理を確認しよう
- コードを書いてみよう
- コードの解説
- 「閉じる」ボタンの処理を書こう
Chapter12 「売上情報」の修正フォームを作ろう
12-1 「売上情報」登録フォームを活用しよう
- 登録フォームをコピーしよう
- デザインの変更とタブオーダーの設定をしよう
12-2 フォームの初期化処理を設定しよう
- 処理の内容を確認しよう
- コードを修正しよう
- コードの解説
- 「検索」フォームの「選択されている伝票を編集する」ボタンの処理を復活させよう
- 動作を確認しよう
12-3 「更新」ボタンをクリックしたときの処理を修正しよう
- 処理の概要を確認しよう
- コードを修正しよう
- コードの解説
12-4 「明細行の削除」ボタンをクリックしたときの処理を修正しよう
- 処理の概要を確認しよう
- コードを修正しよう
- コードの解説
Chapter13 「会社情報」の登録/修正フォームを作ろう
13-1 コントロールを配置しよう
- 「設定」シートを確認しよう
- フォームを追加しよう
- コントロールを追加しよう
- コントロールのフォーカスの順序を設定しよう
13-2 フォームの初期化処理を設定しよう
- コードを書いてみよう
13-3 「登録」ボタンの処理を書いてみよう
- 「登録」ボタンのコードを書いてみよう
Chapter14 「請求書」の指定フォームを作ろう
14-1 コントロールを配置しよう
- フォームを追加しよう
- コントロールを配置しよう
- コントロールのフォーカスの順序を設定しよう
14-2 フォームの初期化処理を設定しよう
- 処理の内容を確認しよう
- コードを書いてみよう
- 動作確認をしよう
- コードの解説
14-3 年月を指定したときの処理を書こう
- 処理の内容を確認しよう
- コードを書いてみよう
- 動作を確認しよう
- コードの解説
14-4 「請求書の作成」ボタンをクリックしたときの処理を書こう
- リストボックスの行を選択したときにボタンを使用可能にしよう
- 「請求書の作成」ボタンをクリックしたときの処理の内容を確認しよう
- コードを書いてみよう
- コードの解説
Chapter15 「請求書」のフォームを作ろう
15-1 コントロールを配置しよう
- フォームを追加しよう
- コントロールを配置しよう
- コントロールのフォーカスの順序を設定しよう
15-2 フォームの初期化処理を設定しよう
- 処理の内容を確認しよう
- コードを書いてみよう
- 動作確認をしよう
- コードの確認
15-3 「請求書印刷」シートを用意しよう
- 印刷の処理について確認しよう
- 請求書のフォーマットを作成しよう
- ページ設定をしよう
15-4 「印刷」ボタンをクリックしたときの処理を書こう
- 処理の流れを確認しよう
- コードを書こう
- 動作確認をしよう
- コードの解説
15-5 フォームを閉じたときに発行情報をリストボックスに表示しよう
- 呼び出し元のフォームの情報を更新しよう
- フォームを閉じるときに発生するイベントにコードを書こう
- 「閉じる」ボタンに先ほどのコードを記述する方法もある
Chapter16 役に立つテクニック
16-1 リストボックス内の項目を見栄えよくしよう
- スペースを挿入して見た目を整えよう
- 見た目整形用の関数を作成しよう
- FormatAddSpace関数を使ってみよう
- 必要に応じてスペースを削除しよう
- 売上情報関連のフォームのリストボックスの見栄えをよくしよう
16-2 抽出結果をソートしてリストボックスに表示しよう
- frmBillOptionのリストボックスを顧客ID順にソートして表示しよう
- 請求書の明細行を見やすい順にソートしよう
16-3 カレンダーフォームを作成しよう
- カレンダーフォームの機能を確認しよう
- フォームを作成しよう
- コントロールを配置しよう
- フォームの初期化処理を書こう
- ラベルに日付を表示するプロシージャを書こう
- コードの解説
- コンボボックスの値でmakeCalendarプロシージャを実行しよう
- 動作を確認したらスピンボタンを設定しよう
- 日付ラベルをクリックしたときの処理を書こう
- 売上情報の検索フォームでカレンダーフォームを呼び出そう
- カレンダーの動作確認をしよう
16-4 「商品マスタ」登録フォームのコンボボックスの設定をしよう
- 処理の内容を確認しよう
- 動作を確認しよう
16-5 数字しか入力できないようにしよう
- 入力時に発生するイベントを確認しよう
- 数字しか入力を受け付けない関数を作成しよう
- KeyPressイベントプロシージャでcheckNumを呼び出そう
16-6 効率的に複数コントロールの入力チェックをしよう
- 入力必須コントロールのTagプロパティを活用しよう
- 入力チェックの関数を作成しよう
- IsEntryData関数を使って入力チェックをしよう
16-7 システムの最終設定をしよう
- ユーザーからExcelシートを隠蔽しよう
- シートの内容を確認する方法
- 最後に
アプリ作成で学ぶ Excel VBAプログラミング ユーザーフォーム&コントロール
横山達大(著)
秀和システム