Accessのコントロールソースとは?設定方法・レコードソースとの違いまで解説

概要

AccessのControl Source(コントロールソース)は、テキストボックスなどのコントロールに「何を表示・入力するか」を指定するプロパティです。フィールド名を指定すればデータと連結し、式を指定すれば計算結果を表示できます。一方、フォームやレポート全体のデータ元を決めるのはRecord Sourceです。両者を分けて理解すると、フォーム設計や既存Accessの調査が格段に分かりやすくなります。

この記事でわかること

  • Control Source(コントロールソース)の役割と、フォーム・レポート内での位置付け
  • プロパティシートからControl Sourceを設定する基本手順
  • Control SourceとRecord Sourceの違い、および両者がどうつながるか
  • 連結・非連結・演算コントロールの3分類と値が保存される条件
  • Control Sourceに計算式を設定する方法と実務で使いやすい式の例
  • コンボボックスのRow Sourceとの違い、#Name?などの代表的なトラブル
  • 既存Accessを改修するときにControl Sourceから構造を調査する方法

この記事の主な内容

1.Accessのコントロールソースとは?まず30秒で理解しよう
2.コントロールソースを設定する方法|プロパティシートから指定
3.Control SourceとRecord Sourceの違い
4.連結・非連結・演算コントロール|Control Sourceの3つの使い方
5.Control Sourceに計算式を設定する方法と具体例
6.コントロールソースで失敗しやすいポイントと既存Accessの確認方法

7.まとめ|Control Sourceは「個々の部品とデータをつなぐ設定」
8.よくある質問(FAQ)

想定読了時間:約12~15分


1. Accessのコントロールソースとは?まず30秒で理解しよう

Control Sourceの全体像
AccessフォームのテキストボックスとControl Source、フィールドの関係を示した図
フォーム → コントロール → Control Source → フィールド/式、という関係を一枚で整理。

Accessのフォームやレポートには、テキストボックス、コンボボックス、チェックボックスなど多くのコントロールを配置できます。そのうち、データを表示・入力するコントロールが「どのフィールドや式を使うか」を決める設定がControl Sourceです。

例えば顧客入力フォームに「顧客名」というテキストボックスがある場合、Control Sourceへ「顧客名」フィールドを指定すると、そのフィールドの値が表示されます。さらに、編集可能なデータソースであれば、フォーム上で変更した内容も元データへ反映されます。

30秒でまとめるとControl Sourceは「このコントロールに何を表示するか」を決める設定です。フィールドを指定すれば連結、空欄なら非連結、式を指定すれば演算コントロールとして利用できます。

Control Sourceは「テーブル名を指定する項目」ではない

フォーム→コントロール→フィールドの関係
AccessのRecord SourceとControl Sourceの階層関係を示した図
例:F_顧客入力 → Q_顧客一覧 → txtCustomerName → 顧客名

ここで混同しやすいのが、フォーム全体のデータ元と個々のコントロールのデータ元です。Control Sourceに通常指定するのは、フォームやレポートで利用可能なフィールド名、または式です。テーブル名やクエリ名そのものを指定する設定ではありません。

一方で、フォーム全体がどのテーブル・クエリ・SQL文を使うかはRecord Sourceで決まります。そのためControl Sourceを理解するには、まず「全体のデータ元」と「各部品が使う項目」を分けて考えることが重要です。


2. コントロールソースを設定する方法|プロパティシートから指定

Control Sourceは、対象コントロールのプロパティシートから設定します。操作自体は難しくありません。ただし、フォーム全体ではなく「設定したいテキストボックスなどを選択していること」が重要です。選択対象を間違えるとControl Sourceが表示されません。

Control Sourceを設定する5STEP
Accessのプロパティシートからコントロールソースを設定する手順
デザインビュー→コントロール選択→F4→データタブ→Control Source設定

基本の5STEP

STEP操作確認ポイント
1フォームまたはレポートをデザインビューで開く対象オブジェクトを間違えない
2設定したいテキストボックス等を選択選択ハンドルが対象コントロールに付いているか
3F4でプロパティシートを表示右側などにプロパティシートが表示される
4[データ]タブを開く「コントロールソース」を探す
5フィールド名または式を指定フォームビューで表示・編集結果を確認する

フィールドリストから追加すると自動設定しやすい

フィールドリストからControl Sourceを自動設定
Accessのフィールドリストからフォームへフィールドをドラッグし連結コントロールを作る図
Alt+F8 → フィールド選択 → ドラッグ → Control Source自動設定

新しくフォームを作る場合は、空のテキストボックスを配置してからControl Sourceを設定する方法だけではありません。フィールドリストからフィールドをフォームへドラッグすると、Accessがそのフィールドに対応する連結コントロールを作成します。

さらに、ラベル名や表示形式なども元フィールドの設定を参考に自動設定されます。そのため、既存データを入力・表示するフォームでは、フィールドリストから配置する方法が初心者にも分かりやすく、設定漏れを減らしやすいでしょう。


3. Control SourceとRecord Sourceの違い

Control SourceとRecord Sourceは名前が似ているため、Access初心者が特に混乱しやすいプロパティです。両者の違いは「設定対象の範囲」を意識すると整理できます。Record Sourceはフォームやレポート全体、Control Sourceはその中に置かれた個々のコントロールを対象にします。

Record SourceとControl Sourceの違い
Accessフォーム全体のRecord Sourceと各テキストボックスのControl Sourceを比較した図
Q_顧客一覧→フォーム全体/顧客名→個別テキストボックス
比較項目Record SourceControl Source
日本語レコードソースコントロールソース
対象フォーム/レポート全体テキストボックス等の個々のコントロール
役割利用するデータ全体を決めるそのコントロールに表示・入力する値を決める
設定例Q_顧客一覧顧客名
主な指定内容テーブル名・クエリ名・SQL文フィールド名・式

具体例|顧客入力フォームの場合

例えば「F_顧客入力」というフォームのRecord Sourceが「Q_顧客一覧」だとします。Q_顧客一覧に顧客ID、顧客名、住所、電話番号が含まれていれば、フォーム上の各テキストボックスは、それぞれのフィールドをControl Sourceとして指定できます。

つまり、Record Sourceが「利用できるデータの範囲」を決め、その中から個々のコントロールがどの値を使うかをControl Sourceで選ぶイメージです。この関係を理解すると、Control Sourceのドロップダウンに表示されるフィールドの意味も分かりやすくなります。

Record SourceにはSQL文も指定できる

Record Sourceにはテーブル名や保存済みクエリだけでなく、SQL文を指定することもできます。例えば顧客IDと顧客名だけを使うフォームなら、次のようなSELECT文をデータ元にすることも可能です。

SQL例
SELECT 顧客ID, 顧客名 FROM T_顧客 ORDER BY 顧客名;

この場合も、個々のテキストボックスでは「顧客ID」「顧客名」をControl Sourceとして指定します。したがって、SQLを書いた場所とコントロールへ表示するフィールドの設定は別々に管理されます。


4. 連結・非連結・演算コントロール|Control Sourceの3つの使い方

MicrosoftはAccessのコントロールを、データとの関係によって「連結(Bound)」「非連結(Unbound)」「演算(Calculated)」の3種類に整理しています。Control Sourceを見ると、テキストボックス等がどの種類として使われているか判断しやすくなります。

連結・非連結・演算コントロール
AccessのControl Sourceによる連結・非連結・演算コントロール3種類を比較した図
フィールド名/空欄/式、の違いをカード型で比較
種類Control Sourceの状態主な用途値の保存
連結コントロールフィールド名を指定顧客名・住所・電話番号などの表示/入力編集可能なデータソースなら元フィールドへ反映
非連結コントロール空欄(テキストボックス等)検索条件、一時入力、補助情報通常はテーブルへ保存しない
演算コントロール式を指定金額計算、文字連結、日付計算式の計算結果自体は通常保存しない

連結コントロール|フィールドの値を表示・編集する

Control Sourceに「顧客名」などのフィールド名を設定すると、そのコントロールは連結コントロールになります。フォームでレコードを移動すれば、現在のレコードに対応する顧客名が表示されます。また、データソースが更新可能であれば、入力内容を元データへ反映できます。

Control Sourceにフィールドを指定した場合
Accessのテキストボックスに顧客名フィールドをControl Sourceとして指定した連結イメージ
テーブル/クエリの顧客名 → テキストボックス → 編集内容が元データへ反映

非連結コントロール|保存しない値を扱う

一方、検索開始日や検索キーワードなど、テーブルへ保存する必要がない値は非連結コントロールで扱えます。例えば「txtSearchName」という非連結テキストボックスへ検索語を入力し、その値をクエリ条件やVBAから参照する設計です。

ただし、非連結のままでは入力した値がレコードへ自動保存されません。「入力できたから保存された」と誤解しないよう、用途を明確にして使うことが大切です。

演算コントロール|式の結果を表示する

Control Sourceにフィールド名ではなく式を指定すると演算コントロールになります。例えば数量と単価から金額を表示したり、顧客名の後ろに敬称を付けたりできます。計算結果をその場で表示できるため、フォームやレポートの見せ方を柔軟にできます。


5. Control Sourceに計算式を設定する方法と具体例

計算式をControl Sourceへ設定するときは、基本的に先頭へ「=」を付けます。フィールド名やコントロール名を参照する場合は角括弧[ ]で囲み、文字列を追加するときはダブルクォーテーションを使います。まずは単純な式から試すと理解しやすいでしょう。

Control Sourceに計算式を設定
AccessのControl Sourceへ式を入力して演算コントロールを作る画面イメージ
プロパティシートのデータタブに =[数量]*[単価] を設定

よく使う計算式の例

目的Control Sourceの例表示イメージ
顧客名に敬称を付ける=[顧客名] & ” 様”山田商事 様
数量×単価を計算=[数量]*[単価]15,000
値引後金額を表示=Nz([売上金額],0)-Nz([値引額],0)98,000
姓と名を結合=[姓] & ” ” & [名]山田 太郎
7日後の日付を表示=Date()+7今日から7日後
フォームでよく使う計算式
AccessのControl Sourceで使える文字結合・金額計算・日付計算の例をまとめた図
単純な式から実務で使いやすい例まで一覧化

式の計算結果は基本的にテーブルへ保存されない

演算コントロールに表示される値は、その式を実行した結果です。Control Sourceへ「=[数量]*[単価]」と書いたからといって、その計算結果が自動的にテーブルの金額フィールドへ保存されるわけではありません。保存が必要なら、データ設計自体を別途検討します。

また、同じ計算を複数のフォームやレポートで使う場合は、Control Sourceへ個別に同じ式を書くより、クエリ側で計算列を作る方が管理しやすいケースがあります。ロジックを一か所へ集約できるため、将来の式変更や不具合調査が容易になります。

実務ポイント
画面固有の簡単な表示計算はControl Source、複数画面・帳票で共通利用する計算はクエリ側へまとめる、というように役割を分けると保守しやすくなります。

6. コントロールソースで失敗しやすいポイントと既存Accessの確認方法

Control Sourceはシンプルなプロパティに見えますが、フォーム全体のRecord Source、コントロール名、コンボボックスのRow Sourceなどと関係するため、設定を誤ると値が表示されない、編集できない、#Name?が表示されるといったトラブルにつながります。

失敗1|Record SourceとControl Sourceを混同する

フォーム全体のデータ元に「T_顧客」を指定するのはRecord Sourceです。対して、顧客名テキストボックスのControl Sourceには「顧客名」を指定します。テーブル名をControl Sourceへ入れればよい、という関係ではありません。

失敗2|Record Sourceに存在しないフィールドを指定する

フォームのRecord Sourceが「Q_顧客一覧」で、そのクエリに「部署名」が含まれていない場合、Control Sourceとして部署名を正しく利用できません。まずRecord Sourceを開き、必要なフィールドがデータ元に含まれているか確認します。

失敗3|コントロール名とフィールド名を同じものだと思う

例えばコントロールの名前を「txtCustomerName」、Control Sourceを「顧客名」としている場合、両者は別の設定です。VBAではコントロール名を参照することが多いため、フィールド名だけを見てコードを修正すると対象を取り違える可能性があります。

失敗4|#Name?が表示されたら参照名を確認する

#Name?は、式の中で参照しているフィールド名やコントロール名をAccessが解決できないときに表示される代表的な症状です。スペルの違い、Record Sourceに存在しない項目、コントロール名の変更などを順番に確認します。

失敗5|Control SourceとRow Sourceを混同する

コンボボックスではControl SourceとRow Sourceの両方が登場します。Control Sourceは「選択した結果をどのフィールドへ保存するか」、Row Sourceは「選択肢をどこから取得するか」です。名前は似ていても、役割はまったく異なります。

Control SourceとRow Sourceの違い
AccessコンボボックスのControl SourceとRow Sourceの違いを比較した図
部署IDへ保存する設定と、部署一覧クエリから候補を取得する設定を比較

失敗6|同じ計算式を複数画面へ分散させる

フォームやレポートごとに同じ複雑な式をControl Sourceへ書くと、計算ルールを変更するときに複数箇所を修正する必要があります。さらに、一部だけ修正漏れが起きると画面ごとに結果が変わるため、共通化できる処理はクエリなどへ集約することを検討します。

よくあるControl Sourceの設定ミスとエラー
Accessのコントロールソースで発生しやすいRecord Source混同や#Name?等のトラブル対策図
原因→確認箇所→対策を一覧化

既存Accessでは「データ元→コントロール→処理」の順に確認する

作成者が退職したAccessや、長年改修されてきたAccessを調査する場合は、いきなりControl Sourceを書き換えない方が安全です。まずフォームのRecord Sourceを確認し、次に各コントロールのControl Source、最後にイベントやVBAから参照されているかを確認します。

既存AccessでControl Sourceを確認する流れ
Access既存フォームをRecord SourceからControl Source、イベントまで調査する順番
バックアップ→Record Source→Control Source→式・イベント→テスト
確認順確認するもの主な確認内容
1フォーム/レポート名どの画面を調査しているか
2Record Source元テーブル・クエリ・SQL
3Control Source各コントロールが使うフィールド・式
4コントロール名VBA・式から参照される名称
5イベント/VBA/マクロ変更対象が処理から参照されていないか
6関連クエリ・サブフォーム別オブジェクトへの影響がないか
実務視点
Control Sourceの変更は見た目の修正に見えても、データ更新先やVBAの参照先に影響する場合があります。既存Accessでは、変更前にバックアップを取り、Record Source・Control Source・コントロール名・イベントの依存関係を確認してからテスト環境で修正することが重要です。

既存Accessのデータ構造が分からず困っていませんか?

長年運用されてきたAccessでは、フォームのRecord Source、各コントロールのControl Source、クエリ、VBAが複雑に関係している場合があります。単純にフィールド名を変更しただけでも、別フォームや帳票が動かなくなることがあります。

既存Accessの構造調査、フォーム・クエリ・VBAの改修、SQL Serverへのアップサイジングまで対応でき、仕様書が残っていないAccessや、作成者が不在になったシステムについても、現行構造を確認しながら改善方針を整理できますのでそういったお困りごとがあればお気軽にご相談下さい。


まとめ|Control Sourceは「個々の部品とデータをつなぐ設定」

Control Sourceは、フォームやレポート上のコントロールに何を表示・入力するかを決める重要なプロパティです。フィールド名を指定すれば連結コントロールになり、式を指定すれば演算コントロールとして計算結果を表示できます。

一方、フォーム全体のデータ元はRecord Source、コンボボックスなどの候補元はRow Sourceが担当します。それぞれの役割を分けて理解すれば、Accessのフォーム設計やトラブル調査がしやすくなります。

さらに、複雑な計算を複数の画面へ分散させない、変更前に依存関係を確認する、といった保守性の視点も重要です。Control Sourceを入口としてデータと画面の関係を理解できるようになると、既存Accessの改修にも役立ちます。


よくある質問(FAQ)

テキストボックスなどのコントロールに、表示・入力するフィールドまたは式を指定するプロパティです。

一般に「コントロールソース」と呼びます。Access日本語UIでもプロパティシートに「コントロールソース」と表示されます。

Record Sourceはフォーム/レポート全体のデータ元、Control Sourceは個々のコントロールが利用するフィールドや式です。

フォームまたはレポートをデザインビューで開き、対象コントロールを選択してF4でプロパティシートを表示し、[データ]タブから設定します。

テキストボックス等では、通常は特定フィールドへ連結しない非連結コントロールとして利用できます。検索条件など保存不要の一時値に向きます。

可能です。先頭に「=」を付け、フィールドやコントロールを参照する式を設定すると演算コントロールになります。

Control Sourceに式を設定して表示した計算結果自体は、通常テーブルへ保存されません。保存が必要な場合は別途データ設計を検討します。

Control Sourceは選択結果の保存先・表示値との連結、Row Sourceはコンボボックスやリストボックスの候補データ元です。

あります。例えば部署選択コンボでControl Sourceを「部署ID」、Row Sourceを「Q_部署一覧」とする設計が可能です。

個々のコントロールでは通常フィールド名や式を指定します。フォーム全体のデータ元としてSQL文を使う場合はRecord Sourceへ設定します。

式で参照しているフィールド名・コントロール名が存在しない、名前を変更した、Record Sourceに必要なフィールドがない、といった原因を確認します。

可能です。ただし動的に変更する場合は処理の所在が追えるよう設計し、他のイベントやフォームへの影響も確認してください。

あります。レポートのテキストボックスにフィールドや計算式を設定し、帳票へ値を表示できます。

Accessが連結コントロールを自動作成し、Control Sourceや表示形式など多くの設定を元フィールドに合わせて設定してくれます。

共通利用する計算はクエリ側へまとめると、修正箇所を減らしやすく保守性が高まる場合があります。


参考情報

Microsoft Support:ControlSource Property
https://support.microsoft.com/en-us/access/controlsource-property

Microsoft Support:RecordSource Property
https://support.microsoft.com/en-us/access/recordsource-property

Microsoft Support:Introduction to controls
https://support.microsoft.com/en-us/access/introduction-to-controls

Microsoft Support:Add controls to customize an object
https://support.microsoft.com/en-us/access/add-controls-to-customize-an-object

TOP