簡単なVBAは作ったことがあっても、本格的なアプリの作り方がわからない方は多いのではないでしょうか。処理を作るだけでなく画面を作ったり、ボタンクリック時の処理を作ったりと考えることが多いですよね。こんにちは!フリーランスエンジニア兼テックライターのワキザカです。この記事では、VBAでアプリ開発をしたい方向けに、アプリを作るときの考え方・具体的な作り方を解説します!この記事はこんな人のために書きました。最初に、VBAでアプリを作るときの考え方について解説します。アプリは、基本的に次のような流れで作ります。具体的な処理を設計する簡単な自動化ツールを作るときは、1つの機能で動くものが大半ですよね。データをコピペする処理、レポートを自動で作成する処理、グラフを作成する処理などです。アプリを作る場合は、データ登録・更新・削除などのデータ操作や、一覧データから欲しいデータを検索する処理など機能がとても豊富です。作成、画面や詳細処理の設計が必要なのです。解説だけ見てもわかりづらいと思うので、請求書管理アプリをサンプルに作り方を解説しますね。仕様・画面設計についてです。「請求書管理アプリ」と言っても、どんな機能があるか考える人によって変わってきますよね。そのため、何を作るか具体化するために設計をします。次のようなイメージです。データ一覧の表示、請求書が作成できる機能を設計しました。画面は実際にVBAのユーザーフォームで作った画面ですが、以下のようにExcelの図で作ってもOKです。Excelの図で作った画面設計このように、アプリの概要、機能の一覧、画面イメージの設計を作ることが最初のステップです。ここまで設計出来たら、次は詳細設計をしていきます。次に、詳細設計をします。今回は「請求データ登録機能」について、処理の詳細を考えていきましょう。登録画面の処理を作るときの考え方について解説します。アプリの仕様によって多少変わってはきますが、次のような流れで登録画面の処理を作ります。データ登録それぞれ詳しく解説しますね。画面起動時の処理まず、画面起動時の処理を考えていきます。今回作る画面は、以下でしたね。新規登録画面この中で「発行日」は、「画面を起動したときの日付」が自動で入っていたほうが親切ですよね。そのため、画面起動時に発行日に自動で日付を表示する処理が、起動時の処理になります。このように、画面を起動したときの処理を考えていきます。ちなみに今回は画面にありませんが、以下のように複数の選択肢から選ぶコンボボックスを使う場合も、画面起動時の処理を書きます。コンボボックスの画面サンプル「画面起動時に値をセットする処理が作れる」とまずは覚えて、画面の処理を考えるようにしましょう。入力チェック次に、入力チェックを考えていきます。データを登録するときは、「必須項目のチェック」「型チェック」「桁チェック」などの入力チェックをします。必須チェック:必須項目が入力されているかチェック型チェック:数値型に文字列が入っていないかチェック桁チェック:〇桁までの数値に△桁以上の値が入っていないかチェック今回は、わかりやすく解説するために「全ての項目を必須チェック」のみで進めます。入力したデータをそのまま登録するのではなく、入力したデータを使って計算してから登録したり、入力データとは別のデータを登録に使うケースはよくあります。今回の例だと、請求データ一覧画面の「No」と「更新日時」は画面にないですよね。1」したNoを計算する処理、発行日に時分秒を足した処理が必要ですね。このように、データ登録前に必要な処理を考えていきます。最後に、データ登録する処理を考えていきます。値だけでなく書式や罫線を設定する場合は、その処理も洗い出していきます。今回は値を登録するのみなので、セルを書き込む行番号を計算する処理、セルに書き込む処理のみでOKです。ここまでできたら、アプリを作っていきます。以降は、画面ができていることを前提に進めていきます。設計ができたら、コーディングに移ります。解説が少し長かったため、ここまで設計した内容を整理しますね。画面起動時の処理は、「UserForm_Initialize」に書きます。UserForm_Initializeの作り方は、次のとおりです。今回は、オブジェクト名「txtCreateDate」のテキストボックスに、現在の日付を設定する処理を入れています。Format(Now(),表示方法)を使うと、現在の日付、時間を表示方法の内容に合わせて変更できるので、覚えておくと便利です!これで、起動時の処理が完了です。次に、登録ボタンクリック時の処理を作っていきます。更新日時をセルに書き込む作り方は次のとおりです。ユーザーフォームのボタンをダブルクリックして、オブジェクト名_Click処理を作るボタンのオブジェクト名が「btnRegist」の場合は、btnRegist_Clickの名前でマクロが自動で作られます。補足説明で解説します。"入力項目は全て必須です。"すべて入力してから登録ボタンをクリックしてください。Sub1の処理で、必須チェックを行っています。Subで登録処理を止めています。2の処理では、Noを計算しています。1」でNoを計算しています。3の処理では、データ登録準備をしています。画面で入力した値を変数にセットし、Noや更新日時は計算した値を入れています。このように、事前に登録するデータを変数に入れておくことで計算ミスも減ります。4の処理では、3まで準備したデータを使ってセルに値を書き込んでいます。2の処理で最終データの行数は取得しているので、それを使ってデータを書き込む行数を計算し、データを登録しています。このように、あらかじめ設計をしておくことで、処理に悩まずコードを書いていくことができるのです。アプリ開発を成功させる鍵はExcel機能を有効活用することここまで、アプリ開発の考え方・具体的な作り方を解説してきました。画面を作れば、さまざまなアプリを作ることができるため、とても便利です。やみくもに画面を作ればOKという考え方だと、開発に時間がかかってしまう時があります。Excelはとても機能が豊富なので、Excelの機能でできることは任せることも重要です。シートで実現した例ユーザーフォームの使い方を覚えなくても、シートで実現することもできるのです。このように、Excelの機能を最大限活用して作っていく考え方がとても重要です。「作ること」を目的にせず、「アプリを作って実現したい課題」を意識して設計してみてくださいね!VBA以外の選択肢も今回解説したVBAの請求書アプリを作れるようになると他にも様々な業務が効率化できて大切なスキルではありますが、このままVBAを学び続けるなら親和性のあるプログラミング学習に挑戦してみることもおすすめです。VBAだと会社の業務改善などがメインの業務であり会社に貢献する場面が多くありますが、プログラミングなら年収や働き方などが選べるようになり、もっと自分に努力が返ってくるスキルです。VBAは社内出世など、会社にずっと属していく人のみに必要AIの発達によってVBAで条件を組まなくても良くなる可能性も人材不足かつ、市場か伸びているのはプログラミング、スキル次第で人生に選択肢が増えるこれらの理由から、せっかくVBAというスキルを身につけようとしているなら親和性のあるプログラミングの方が、あなたの人生に選択肢や可能性を増やすのでは?と思います。VBAでも精一杯なのにプログラミング?難しそう。そんな心配をしているあなたでも大丈夫です。侍エンジニア塾ではあなたの目標や性格を踏まえて適切な講師を配属させていただき、マンツーマンで指導していくため、着実にスキルアップしていくことができます。あなたの目標に対して現在のスキルや興味のある分野から最適な学習カリキュラムを作るフルオーダーメイドカリキュラムを作成いたします。これによりあなたの興味関心と授業のカリキュラムが完全にあった状態で学習できるため、確実に未来に繋がる実感を持ちながら学習ができます。あなたの興味や関心からおすすめの言語を判定するプログラミング学習診断アプリを受けてみてください。質問に答えていくだけで、最適な言語やスキルと学習期間を提案いたします。プログラミング言語診断を受けるまとめ今回は、VBAでアプリを作るときの考え方・具体的な作り方について解説しました。アプリが作れるようになると、VBAで出来る事はとても増えます。アプリ開発に挑戦してみてくださいね!TweetPocket無料でSEからWebエンジニアへ転職しませんか?侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、システムエンジニアという職業だけどコードが書けない事務作業が多くスキルがないため将来が不安スクールに通うと完全未経験者と同じスタートになるからレベルが合わないという、すでに知識があるSEならではのお悩みがあることに気づきました。弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。こちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。Wakizaka新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。インフラ、製造、テスト、運用保守など、様々な経験あり。侍ブログ編集部として、これまでに200記事以上の記事を執筆。現在はフリーランスエンジニア兼テックライターとして活動中。