PR

Excelデータベースの入力フォームを作成|別シートに自動入力可【VBA不要】

Thumbnail for  Excelデータベースの入力フォームを作成|別シートに自動入力可【VBA不要】
  • 「標準のフォーム機能だとデザインを変更できない…」
  • 「マクロ/VBAのプログラムを記述せずに独自の入力画面を作りたい」

Excel(エクセル)のデータベースにデータを入力するフォームとして、標準のフォーム機能が使えます。しかし画面のデザインを自由に変更できず、別シートのデータベースへ自動入力させることもできません。Power Query(パワークエリ) を使えば、 VBA/マクロを使わずに独自の入力フォームが構築できます

本記事では、Excelにおけるデータベース入力フォームの作成方法として、標準フォーム機能とPower Queryによる入力画面の構築手順を解説します。

※ 本記事では「データベース=テーブル」として扱います(データベースが1つのテーブルのみで構成されていると仮定)

比較|Excelデータベース入力フォームの実装・作成方法

Excelのデータベースにデータを入力できるフォームを実装・作成する方法には、主に以下の2つがあります。

手法特徴
標準フォーム機能✅ Excel標準機能で、システム構築不要
✅ 数式を設定した項目を自動で保護する
❌ 画面デザインを自由に変更できない
❌ シート上に固定表示できない
❌ 複数セルへの貼り付けなど、効率的な入力方法が使えない
Power Query✅ 入力画面のレイアウトを自由にカスタマイズできる
✅ 数式・関数によるセル値の自動記入(連番・日付など)が可能
✅ 基本システムはマクロ/VBAなしで実装可能
❌ システム構築の難易度がやや高い
❌ データの反映に「すべて更新」の操作が必要
吉峰
吉峰

VBA/マクロによる手法もありますが、本記事では割愛します。

 

Excel標準機能:フォーム機能でデータ入力する方法

フォーム機能は、テーブルの1行分のデータをカード形式で表示・入力できる機能です。

表示方法:クイックアクセスツールバーにフォーム機能を追加

デフォルトでは、フォーム機能のボタンはリボンに表示されていません。使用するには、クイックアクセスツールバーにフォーム機能を追加する必要があります。

追加手順は以下の通りです。

  1. リボンの空いているエリアを右クリック > [リボンのユーザー設定] を選択([ファイル] タブの [オプション] からも可)

    「リボンのユーザー設定」の選択
  2. 「コマンドの選択」[すべてのコマンド] に変更する

  3. 一覧から [フォーム…] を選択し、[追加] ボタンを押す(追加先はお好みで)

    フォームの追加設定
  4. [OK] をクリックして設定を保存する

これで、リボンにフォームボタンが追加されます。

操作方法:フォーム機能でデータを登録・検索・修正

テーブル内のセルを選択した状態で、クイックアクセスツールバーの [フォーム] ボタンをクリックすると、フォームが表示されます。

標準フォーム画面

新規データの追加方法

  1. [新規] ボタンをクリックする
  2. 各フィールドにデータを入力する
  3. Enter キーを押すと、テーブルの最終行にデータが追加される

その他の操作方法

  • 検索[検索条件] ボタンをクリックし、条件を入力して [次を検索] で該当データを表示する
  • 更新 :フォーム上でフィールドの値を書き換え、Enter キーを押す
  • 削除 :対象のデータを表示した状態で [削除] ボタンを押す

自作|Power Queryで入力フォームを作成する方法

Power Queryを使うと、入力フォームのレイアウトを自由に設計した上で、別シートのデータベースへ自動的にデータを蓄積する仕組みを構築できます。

 

仕組み:入力フォームからデータベースへ自動入力する流れ

データの流れは以下の通りです。

  1. 入力フォーム(帳票形式のシート):ユーザーがデータを直接入力する
  2. 入力用テーブル :数式参照で入力フォームのデータを取得する
  3. データベース :Power Queryで入力用テーブルとデータベースを結合し、データベース内にデータを追加する
入力フォームからデータベースへ自動入力する流れ
吉峰
吉峰

「Power Queryで出力したテーブルを再度Power Queryに取り込む」という、少々トリッキーな方法を用います。

入力データをデータベースに反映するには、[データ] タブの [すべて更新] を実行します。「送信」ボタンを作りたい場合は、VBA/マクロが必要です(後述

連番・日付の自動記入にも対応可能

Power Queryを使った入力フォームでは、数式・関数を使ったセル値の自動入力が実現できます。連番や日付の自動入力にも対応できます。

  • 連番=MAX(T_データベース[連番])+1
  • 日付=TODAY()

データベースのテーブル内では、これらの数式の結果が固定された値(セル値)として記録されます。テーブルの並び替えやブックを開く日付が変わっても、値は変化しません。

吉峰
吉峰

Power Queryを経由すると、数式の値がセル値として出力される仕組みを利用しています。

 

作成手順:VBAなしで入力フォームを自作する方法

STEP1

入力フォームシートの作成

入力フォームとなるシートを作成し、データの記入欄を配置します。

記入欄は背景色を変えるとわかりやすくなります。例えば、[ホーム] タブの [スタイル] > [▼] ボタン > [入力] を選択すると、入力用のセルスタイルを適用できます。

入力用スタイルを適用した入力フォームの例
吉峰
吉峰

画像の例では、登録番号:=MAX(T_応対履歴[登録番号])+1(Step2のテーブル作成後でないとエラーになるため注意)日付:=TODAY()を記入しています。


入力フォーム中で、下記のようなUIコンポーネントが使用可能です。

  • プルダウンリスト(データの入力規則)[データ] タブの [データの入力規則] から設定する
  • オプションボタン・チェックボックスなど(フォームコントロール)[開発] タブの [挿入] から配置する
    • 右クリック > ダブルクリックでラベルの編集が可能
    • 右クリック > [コントロールの書式設定] > 「リンクするセル」を設定して、ボタンとセル値がリンクする
    • オプションボタンはグループボックス内に配置すると、複数のボタンを1つのセルと紐づけられる
STEP2

入力フォームのデータをテーブルに集約

入力フォーム内のデータを集約するためのテーブルを新規に作成します。

  1. 入力フォームとは別の場所(同じシートの右側や別シート)に、テーブルを作成する(ショートカット:Ctrl + T

  2. (推奨)テーブル名を設定する(例:T_入力用

    詳細:» Excel表のテーブル化・解除の変換手順|書式設定の消去も【データベース準備】

  3. テーブル内のセルに、入力フォームの記入欄を参照する数式を記入する

    例)

    登録番号対応日顧客名対応内容対応者ステータス要上長報告
    =C5=C6=C7=C8=C9=SWITCH(D10, 1, "未着手", 2, "対応中", 3, "完了", "")=IF(D11="","",D11)
入力用テーブルへの参照設定
STEP3

入力フォームのデータをPower Queryに取り込む

Step2で作成した入力用テーブルを、Power Queryに取り込みます。

  1. 入力用テーブルのセルを選択する

  2. [データ] タブの [テーブルまたは範囲から] をクリックしPower Queryエディター起動

    入力用テーブルの選択とPower Queryエディターの起動
  3. エディターでは何も変更せず、[ホーム] タブの [閉じて次に読み込む] をクリック

  4. 読み込み先に [テーブル] を選択し、出力場所を指定してテーブルを出力する

    読み込み先の指定
  5. (推奨)テーブルにテーブル名を設定する(例:T_対応履歴

STEP4

Power Queryで出力したテーブルを再度取り込む

Step3で出力したテーブルを、再度Power Queryに取り込みます。

  1. Step3で出力したテーブルのセルを選択し、[データ] タブの [テーブルまたは範囲から] をクリックしてPower Queryエディター起動

    Step3で出力したテーブルの選択
  2. エディターでは何も変更せず、[ホーム] タブの [閉じて次に読み込む] をクリック

  3. 読み込み先に [接続の作成のみ] を選択する

    接続の作成のみの選択

この操作により、テーブルのデータをクエリとして保持しつつ、シート上には何も出力しない状態になります。

STEP5

Power Queryでテーブルを結合

Step3で作成されたクエリに、Step4のクエリを追加(結合)します。

  1. [クエリと接続] パネル([データ] タブで表示切替)から、Step3のクエリをダブルクリックしてエディターを開く

    クエリと接続パネルからStep3のクエリを編集
  2. [ホーム] タブの [クエリの追加] をクリックする

    クエリの追加ダイアログ
  3. Step4で作成したクエリを選択して追加する

  4. [閉じて読み込む] でエディターを閉じる

上記の手順で、入力フォームに記入したデータが、「すべて更新」の操作でデータベースに蓄積される仕組みが完成します。

吉峰
吉峰

設定直後は重複した行が追加されますが、手動で削除すればOKです。

使い方|データの入力・管理方法

 

データ入力:フォームからデータベースへ登録

入力フォームからデータベースへデータを登録する手順は以下の通りです。

  1. 入力フォームシートの記入欄にデータを入力する
  2. [データ] タブの [すべて更新] をクリックする(ショートカット:Ctrl + Alt + F5

「すべて更新」を実行すると、Power Queryが動作し、入力データがデータベースのテーブルに追加されます。

「データの追加/送信」操作をわかりやすくするために

Power Queryを使った入力フォームを他の人に使ってもらう場合は、
「使い方がわからない」となりがちです。
以下のいずれかを設置するのがオススメです。

  • 方法1 説明文データを送信するには「更新」操作(ショートカット:Ctrl + Alt + F5)を行ってください を明記する。
  • 方法2 送信ボタン : マクロ/VBAで「更新」操作を行う処理を作成し、ボタンに登録・設置する(後述
 

データ管理:既存データの修正・追加方法

  • データの修正 :データベースのテーブル内で、対象セルの値を直接書き換える
  • データの追加 :データベースのテーブルに直接行を追加して、既存データを取り込む
吉峰
吉峰

すでに既存のデータがある場合は、仕組みを構築した後に、データベースのテーブルにコピペでまとめて追加すればOKです。

 

【参考】「送信」ボタン・記入セルの自動クリアはVBA/マクロが必須

入力フォームからデータベースにデータを追加する仕組みはマクロ/VBAなしでも構築できますが、入力するユーザーからすると「データ追加操作」がわかりづらいという問題があります。「送信」ボタンを設置することでこの問題は解消されるものの、「送信」ボタンはVBA/マクロを使わないと実装できません。

マクロ/VBAで作成した「送信」ボタンの例

VBA/マクロを使った「データ追加操作(Power Queryの更新)と「入力欄のクリア」を行うボタンの作成方法は下記の通りです。

  1. VBAエディター(VBE)を起動する(ショートカット:Alt + F11

  2. [標準モジュール] にコードを記述し、VBEを閉じる

    Sub SubmitData()
        ' ========================== 
        ' クリアターゲットの設定
        Const CLEAR_TARGET_SHEET As String = "入力フォーム" ' シート名 
        Const CLEAR_TARGET_RANGE As String = "C7:C9,D10:D11" ' 手入力するセルを指定 
        ' ==========================
        
        ' 画面のちらつきを抑え、処理速度を向上させる
        Application.ScreenUpdating = False
        
        ' 1. ブック内のすべてのPower Queryを一括更新してデータをデータベースへ蓄積する
        ActiveWorkbook.RefreshAll
        
        ' 2. 指定した入力フォームの記入セルを一括でクリアする
        Sheets(CLEAR_TARGET_SHEET).Range(CLEAR_TARGET_RANGE).ClearContents
        
        ' 画面更新を元に戻す
        Application.ScreenUpdating = True
        
        ' データ更新とクリアが完了したことをユーザーにポップアップ通知する
        MsgBox "データを送信し、入力欄をクリアしました。", vbInformation, "送信完了"
    
    End Sub
    vba
    VBEの標準モジュール
  3. [開発] タブの [挿入] > [ボタン(フォームコントロール)]からボタンを挿入し、「マクロの登録」画面で SubmitData を選択する

吉峰
吉峰

CLEAR_TARGET_SHEETCLEAR_TARGET_RANGE の値は、実際のシート名とセル範囲に合わせて変更してください。

まとめ|Excel入力フォームはVBAなしでもPower Queryで作成可能

本記事の要点は以下の2点です。

  • 標準フォーム機能 :クイックアクセスツールバーに追加すれば、テーブルの1行分のデータをカード形式で入力・検索・修正できる。ただし、画面デザインの変更はできない。
  • Power Queryによる入力フォーム :入力画面のレイアウトを自由に設計でき、VBA不要で別シートのデータベースへ自動入力する仕組みを構築できる。
    • 「更新」操作ボタンを設置したい場合のみ、マクロ/VBAを使用する。

Excelで本格的なデータベース(疑似リレーショナルデータベース)を構築する方法については、以下の記事で解説しています。