概要
| この記事の結論 Accessのフォームに保存用のテキストボックスを追加するには、フォームのレコードソースを設定し、「既存のフィールドを追加」から対象フィールドを配置します。検索語などを一時入力する欄は非連結、計算結果を表示する欄は演算にします。見た目が似ていても保存の仕組みが異なるため、コントロールソースを確認しましょう。 テキストボックスとは、文字列、数値、日付や計算結果をフォーム上で入力・表示するコントロールです。 |
この記事でわかること
- 保存する欄はフィールドに連結する
- 一時入力は非連結にする
- 計算結果は式で表示する
- 名前とコントロールソースを区別する
この記事の主な内容
- テキストボックスの3つの使い方
- 連結テキストボックスを配置する
- 非連結の入力欄とラベルを作る
- 演算テキストボックスで計算結果を表示する
- 入力しやすい書式と編集制限を設定する
- 保存されないときやエラー時の確認
- よくある質問
想定読了時間:約12分~16分
テキストボックスの3つの使い方
テキストボックスは、文字だけでなく数値や日付も扱う入力・表示部品です。配置する前に「テーブルへ保存する」「その場だけで使う」「計算結果を見せる」のどれに使うかを決めます。用途によりコントロールソースの設定が変わります。[1][3]
| 種類 | コントロールソースの例 | 用途 | 入力値の保存 |
|---|---|---|---|
| 連結 | 数量 | 保存先の数量を入力・表示 | レコード保存時に反映 |
| 非連結 | 空欄 | 検索語、期間などの一時入力 | 自動保存されない |
| 演算 | =[数量]*[単価] | 計算結果の表示 | 結果は自動保存されない |
欄の見た目だけでは保存先を判断できない
非連結のテキストボックスにも文字を入力できます。そのため、画面上で入力できたことをもって登録完了と判断すると、閉じた後に値が残らないという問題につながります。保存が必要な欄では、必ずコントロールソースと元テーブルを確認してください。
演算テキストボックスは式の結果を表示する欄であり、その結果へ直接上書き入力する使い方には向きません。金額を手修正する業務なら、計算結果と調整額の保存項目を分けるなど、値の由来が追える設計を検討します。

本記事の練習例
保存先をT_明細、フォームをF_明細とします。T_明細には「明細ID:オートナンバー型・主キー」「数量:数値型・長整数型」「単価:通貨型」「備考:長いテキスト型」を用意します。説明用の新しいコピーで試し、業務中のテーブルへ不用意に列を追加しないでください。
連結テキストボックスを配置する
保存する入力欄は、既存のフィールドから追加すると連結を設定しやすくなります。最初にフォームのデータ元を指定し、その後に対象フィールドを配置する順序で進めます。プロパティシートはF4キーでも表示できます。[1][2]
| 手順 | 操作 | 確認ポイント |
|---|---|---|
| 1 | F_明細をデザインビューで開く | 編集するフォームが正しい |
| 2 | フォーム全体を選択する | プロパティの対象がフォーム |
| 3 | レコードソースにT_明細を設定 | 数量・単価を参照できる |
| 4 | [既存のフィールドを追加]を開く | フィールドリストが出る |
| 5 | 数量と単価を詳細セクションへ配置 | 連結されたコントロールができる |
| 6 | フォームビューで入力して保存 | T_明細の値が更新される |
既存の非連結欄を保存用へ変更する場合
すでに配置した非連結テキストボックスは、コントロールソースに「数量」などのフィールド名を指定すると連結欄にできます。候補にフィールドが出ない場合は、フォームのレコードソースにそのフィールドが含まれるかを確認します。
クエリを元にしているときは、テーブルに列が存在していても、クエリの出力に含まれていない場合があります。フィールド名を推測で入力し続けるのではなく、元クエリを開いて列を確かめてください。計算列や集計結果は、表示できても入力先にできないことがあります。

コントロールの名前と保存先を分ける
[その他]などにある[名前]は、VBAや式から画面部品を指定する識別名です。[データ]の[コントロールソース]は、保存先のフィールドや表示式を指定します。付属ラベルの[標題]は、利用者に見せる説明です。この3つは同じ役割ではありません。
| 設定対象 | 設定例 | 役割 |
|---|---|---|
| テキストボックスの名前 | txt数量 | 画面部品の識別 |
| コントロールソース | 数量 | 保存するフィールド |
| ラベルの標題 | 購入数 | 利用者への表示 |

「購入数」というラベルへ変えても、テーブルのフィールド名は変わりません。一方、コントロール名を変えると、VBA、マクロ、他フォームの参照式に影響することがあります。既存システムの改修では参照箇所を確認し、名前変更後に関連機能も動かしてください。
非連結の入力欄とラベルを作る
検索語や印刷期間のように、保存する必要がない値は非連結欄が向いています。フォームをデザインビューで開き、[テキストボックス]を選んで配置します。コントロールソースが空欄であることを確認し、名前を「txt検索語」など用途に合わせて設定します。[1]
値を入れただけでは検索処理は動かない
非連結欄は、一時的に値を保持する部品です。検索欄として配置しても、自動的に一覧を絞り込むわけではありません。検索ボタンからフィルターやパラメータークエリへ値を渡すなど、利用する処理を別に設定します。
また、非連結欄はレコードごとの保存フィールドではありません。同じフォームを開いたまま別レコードへ移動しても、欄の値がそのまま残ることがあります。入力途中の備考を一時保存する目的で使うと、どのレコードの値か分からなくなるため注意が必要です。

ラベルと入力欄をそれぞれ選択する
テキストボックスを配置すると、説明用ラベルが一緒に作られることがあります。ラベルの文字を直したいときはラベルを選び、入力欄の幅を直したいときはテキストボックスを選びます。プロパティシートの選択対象を見ると、どちらを編集しているか判断できます。
複数部品が一緒に動く場合は、付属ラベルとの関係やコントロールレイアウトを確認してください。無理に削除して作り直す前に、移動ハンドルで個別に調整できるか確認します。既存フォームではイベントや参照式があるため、部品の削除は配置変更より影響が大きくなります。
演算テキストボックスで計算結果を表示する
計算結果を見せる場合は、新しいテキストボックスを置き、名前を「txt金額表示」、コントロールソースに「=[数量]*[単価]」を設定します。数量が3、単価が500なら、結果は1500です。書式を通貨などにして表示を整えます。[1][3]
未入力を0とみなすか決める
数量や単価にNullがあると、単純な掛け算では結果もNullになります。Nullは値がない状態であり、数値の0や空文字列と区別します。未入力をまだ未確定と判断する業務では、結果を空欄にしておく方が意味を保てます。[7]
未入力を0として見積金額を表示する仕様なら、次の式が候補です。ただし、この式を入れたから必須入力の確認が不要になるわけではありません。単価未定を0円と誤解させないよう、入力項目の必須条件や表示説明も合わせて決めます。
=Nz([数量],0)*Nz([単価],0)

計算結果を保存するかは業務要件で判断する
常に数量と単価から再計算できる値を保存すると、元の値と計算結果が食い違う管理が増えます。一方、受注時点の単価や確定請求額を履歴として固定する業務では、保存が必要なこともあります。演算欄の配置と、金額の確定・保存設計は分けて考えましょう。
同じ名前のフィールドとコントロールを使って式を書くと、参照先が分かりにくくなる場合があります。計算欄は「txt金額表示」のように専用名にし、自分自身を参照する式を避けます。たとえば計算欄を数量と名付け、そこに「=[数量]*[単価]」を設定すると、循環参照の原因になります。
入力しやすい書式と編集制限を設定する
書式は値の見せ方、入力規則は入力できる値の条件です。日付の表示を「yyyy/mm/dd」にしても、それだけで入力可能な日付範囲が制限されるわけではありません。保存できる値の種類は、連結先のデータ型も含めて判断します。[6]
| 設定 | 目的 | 確認する点 |
|---|---|---|
| 書式 | 桁区切り、日付などの表示 | 入力制限と混同しない |
| 定型入力 | 入力する並びや形式の補助 | 連結先の型・業務上の例外 |
| 入力規則 | 許可する値の条件 | 0、空欄、境界値の動作 |
| 既定値 | 新規入力の初期値 | 既存レコードの一括修正ではない |
| タブストップ | Tab移動の対象 | 入力順に不要な欄を挟まない |

表示とコピーを許可し編集だけを止める
内容を読んだりコピーしたりできる表示欄にする場合は、[使用可能]を[はい]、[編集ロック]を[はい]にする設計が適しています。使用可能を[いいえ]にすると操作対象から外れるため、コピーできる表示欄とは使い勝手が異なります。[4][5]
| 使用可能 | 編集ロック | 一般的な使い方 |
|---|---|---|
| はい | いいえ | 通常の入力欄 |
| はい | はい | 表示・選択用で編集は禁止 |
| いいえ | 任意 | 利用者が操作しない欄 |

長文の幅と入力順を調整する
備考欄は1行分の高さでは内容を読み取りにくくなります。長いテキスト型に連結した欄の高さとスクロール設定を確認し、必要ならEnterキーの動作も調整します。複数行の入力可否だけでなく、保存後に全文を再表示できるかまで確認してください。
タブオーダーは画面上の見た目の順序と合わせます。自動計算欄を飛ばして次の入力欄へ進めると、利用者が入力できない欄で止まりにくくなります。マウスだけでなく、TabとShift+Tabによる往復も試すと配置上の問題を見つけやすくなります。
保存されない入力欄や計算エラーの調査が必要な場合は
まずは本記事の手順をコピー上で試し、設定と保存先を確認してください。既存VBAや複数の画面、外部データへの影響が分からない場合は、変更範囲を調査してから改修する方法が適しています。
Accessの教科書ではAccessの開発・保守・改修やSQL Serverとの連携を扱っています。ご相談時には、発生する画面、操作手順、エラー内容、利用環境を整理すると状況を共有しやすくなります。
保存されないときやエラー時の確認
保存の問題は、欄の種類、連結先、元データの更新可否の順で確認します。エラー表示を隠す式を追加する前に、どこへの参照が失敗したかを確かめてください。見た目だけを直すと、誤った計算結果に気付けなくなることがあります。
| 症状 | 主な確認先 | 対処例 |
|---|---|---|
| 閉じると値が消える | コントロールソース | 保存用フィールドへ連結 |
| #Name? が出る | フィールド・コントロール名 | 名前の誤記や元クエリの出力を確認 |
| #Error が出る | 式の型、関数、循環参照 | 単純な式に分けて原因を確認 |
| 計算結果が空欄 | 数量や単価のNull | 未入力の扱いを決める |
| 全行が同じ値になる | 非連結欄、参照式 | 行ごとの値ならフィールドへ連結 |
| 入力そのものができない | 編集ロック・演算・更新可否 | 欄とフォームの設定を確認 |

値の保存と計算を小さなデータで確認する
数量3、単価500を登録し、金額表示が1500になるか確認します。次に数量を4へ変えて2000になるか、フォームを開き直して数量4が残るかを見ます。金額表示の再計算と、元の値の保存を別々に確認できるテストです。
さらに、未入力、0、負数、長い文字列など業務上の境界も試します。すべてを受け付ける必要はありませんが、「何を拒否するか」「拒否された利用者がどう直すか」が明確であることが大切です。既存画面に追加した場合は、検索・帳票・保存ボタンの参照も確認します。
テキストボックスは、置くだけなら簡単な部品です。ただし、実務では保存する値と表示する値を区別することが重要です。コントロールソースを見れば、入力欄がどの役割を持っているかを確認できます。
よくある質問
数値や日付も扱えます。連結先のデータ型と、書式や入力規則などの設定によって入力・表示の条件が決まります。
自動では保存されません。保存先のフィールドへ連結するか、値を書き込む処理が必要です。一時的な検索条件には非連結が向いています。
変わりません。ラベルの標題は画面上の説明です。フィールド名、コントロール名、コントロールソースとは別に管理します。
式の結果を表示する欄なので、通常の入力欄のように結果へ直接入力して修正できません。調整値が必要なら別の入力項目を設けます。
書式は主に見え方を指定します。保存値を変える操作と区別してください。データ型の変更や更新クエリは、書式変更より影響が大きくなります。
VBA、マクロ、計算式、他フォームからの参照を確認します。名前を変えた後は表示だけでなく、ボタン操作や帳票出力も試してください。
保存されない入力欄や計算エラーの調査が必要な場合は
まずは本記事の手順をコピー上で試し、設定と保存先を確認してください。既存VBAや複数の画面、外部データへの影響が分からない場合は、変更範囲を調査してから改修する方法が適しています。
Accessの教科書ではAccessの開発・保守・改修やSQL Serverとの連携を扱っています。ご相談時には、発生する画面、操作手順、エラー内容、利用環境を整理すると状況を共有しやすくなります。
参考情報
[1] テキストボックスの追加
https://support.microsoft.com/en-us/access/add-a-text-box-control-to-a-form-or-report
[2] コントロールの追加
https://support.microsoft.com/en-us/access/add-controls-to-customize-an-object
[3] ControlSource
https://learn.microsoft.com/en-us/office/vba/api/access.textbox.controlsource
[4] Locked
https://learn.microsoft.com/en-us/office/vba/api/access.textbox.locked
[5] Enabled
https://learn.microsoft.com/en-us/office/vba/api/access.textbox.enabled
[6] 入力規則
https://support.microsoft.com/en-us/access/restrict-data-input-by-using-validation-rules
[7] IsNull
https://support.microsoft.com/en-us/access/isnull-function
関連記事
Accessのコントロールソースとは?設定方法・レコードソースとの違いを初心者向けに解説