Accessで文字列を結合する方法 Nullと区切り文字の扱いまで解説

概要

この記事の結論
Accessで複数の文字列をつなぐには、半角の&を使います。クエリでは[表示名: 式]、フォームやレポートの計算テキストボックスでは[=式]の形で入力します。Nullを空文字として扱う場合はNzで明示し、住所の建物名がない行では区切りの空白も条件付きにすると整います。日付や数値を混ぜるときは表示形式を指定し、元データを保持したまま用途別の表示を作る方法が基本です。
文字列の結合とは、同じ行にある複数の値や固定文字をつなぎ、1つの表示文字列を作る処理です。

この記事でわかること

  • クエリで氏名と住所をつなぐ
  • Nullと不要な区切り文字に対応する
  • 日付と数値を目的の表記で結合する
  • フォームとレポートで結合結果を使う

この記事の主な内容

  1. 文字列結合の基本と入力場所を押さえる
  2. クエリで氏名と住所をつなぐ
  3. Nullと不要な区切り文字に対応する
  4. 日付と数値を目的の表記で結合する
  5. フォームとレポートで結合結果を使う
  6. エラーの切り分けと出力前の確認
  7. よくある質問

想定読了時間:約14分~18分


文字列結合の基本と入力場所を押さえる

Accessで文字列をつなぐには、半角の&を使います。例えば姓と名、住所と建物名など、別々に保存された項目を1つの表示にまとめられます。データを保存する構造は分けたままにし、一覧や帳票で見せるときに結合すると、検索や修正もしやすくなります。

クエリとフォームでは式の書き出しが違う

クエリのデザイングリッドでは、新しい列名の後ろに半角コロンを付けて式を書きます。フォームやレポートの計算テキストボックスでは、コントロールソースに=から始まる式を設定します。Excelのセルへ式を入れる感覚で、どこでも同じ書式を貼り付けないようにしてください。

入力する場所式の例役割
クエリのフィールド行氏名: [姓] & ” ” & [名]氏名という結果列を作る
テキストボックスのコントロールソース=[姓] & ” ” & [名]画面や帳票に計算結果を表示
SQLビュー[姓] & ” ” & [名] AS [氏名]結果列に別名を付ける
クエリは表示名とコロン、計算テキストボックスは等号から始める違い

本文の例で使う&、:、=、”、括弧は半角です。見た目が似た全角の&や:、文章用の曲がった引用符を混ぜると、構文エラーの原因になります。日本語のフィールド名は[姓]のように角括弧で囲むと、どこまでが名前なのか読み取りやすくなります。


クエリで氏名と住所をつなぐ

まずは同じレコード内の2項目を結合するところから試します。ここではT_顧客に顧客ID、姓、名、住所1、建物名、顧客コードを用意します。文字として扱う項目は短いテキスト型、顧客IDは主キーです。顧客コードの先頭ゼロを残したい場合は数値型にしません。

サンプルデータで基本式を確認する

顧客ID姓名住所1建物名
1山田花子千代田区丸の内1-1青空ビル301
2佐藤太郎中央区銀座2-2Null
3鈴木一郎港区芝3-3空文字

Nullは値が存在しない状態、空文字は長さ0の文字列を意味します。この表では説明のため文字で区別していますが、実際に「Null」や「空文字」という文字を建物名へ入力するわけではありません。空文字を保存できるかはフィールドの設定によります。

1. [作成]→[クエリデザイン]からT_顧客を追加します。

2. 顧客ID、姓、名、住所1、建物名を下のグリッドへ追加します。

3. 空いている列のフィールド行へ次の式を入力します。

4. データシートビューで氏名が1つの列に表示されるか確認します。

氏名: [姓] & ” ” & [名]

” “は半角スペース1文字です。姓と名の間に空白を入れたくない場合は、この部分を除きます。クエリを保存しても、元の姓と名の列が1つになるわけではありません。結果を見る際に計算した列が追加されるため、元の項目を個別に検索・更新できます。

姓と名、住所と建物名を別項目で保持し表示時に結合する構成

SQLで同じ結果を作る

SELECT [顧客ID],
 [姓] & ” ” & [名] AS [氏名],
 [住所1] & [建物名] AS [住所表示]
FROM [T_顧客];

住所の基本式は2項目を直接つなぐだけです。住所1が「千代田区丸の内1-1」、建物名が「青空ビル301」なら連続した文字列になります。読みやすくするために空白を入れる場合は、建物名がない行にまで空白を追加しないよう、次の方法で条件を付けます。


Nullと不要な区切り文字に対応する

結合結果を安定させるには、Null、空文字、空白だけの文字列を区別します。Nullを空文字として扱う方針なら、Nz([項目],””)で明示します。&は一方だけがNullなら空文字として連結しますが、両方がNullの場合などを含めて意図をそろえるため、置換方針を式に書くと分かりやすくなります。

状態意味確認の例
Null値がない・不明Is Null
空文字 “”長さ0の文字列Len([項目])=0
半角スペースだけ空白文字が保存されているLen(Trim(Nz([項目],””)))=0
値が不明なNull、長さゼロ、スペース文字を区別する図

建物名があるときだけ空白を追加する

次は、建物名がNull、空文字、半角スペースだけなら区切りも付けず、内容がある場合だけ半角スペースを挟む式です。IIfは条件に応じて2つの値を選ぶ関数です。長い式を1度に理解しようとせず、「住所の整形」と「建物名があるか」の2つに分けて考えます。

住所表示: Trim(Nz([住所1],””) & IIf(Len(Trim(Nz([建物名],””)))=0,””,” ” & Trim(Nz([建物名],””))))

NzでNullを空文字へ、Trimで前後の半角空白を整理し、Lenで残った文字数を調べます。建物名があるときだけ” “と建物名を付け、最後に全体の前後の空白を整えます。全角スペースやタブなどをすべて除去する式ではないため、必要なら入力・取込時の整理ルールを追加します。

住所1建物名期待する結果
千代田区丸の内1-1青空ビル301千代田区丸の内1-1 青空ビル301
中央区銀座2-2Null中央区銀座2-2
港区芝3-3空文字港区芝3-3
建物名ありとなしで余計な空白が出ない結合結果の比較

氏名についても、姓または名がないデータをどう扱うか決めます。表示上の空白を消すだけで、未入力が正しいと判断してよいわけではありません。入力必須の項目が欠けている場合は、文字列をきれいにする処理と、データ不備の検出を分けてください。

+を文字結合の標準にしない

&は文字列の結合を明示する記号です。+は数値の加算にも使われ、型の組み合わせによって挙動が変わります。また、Nullを含む+の式はNullが伝わる場合があります。あえてその性質を使う方法もありますが、初心者向けの結合式では&とNz、必要な条件分岐を使う方が意図を追いやすくなります。

&による連結と+による加算・Null伝播を対比する図

日付と数値を目的の表記で結合する

日付や金額を文字列に混ぜると、地域設定や元の型によって表示が想定と違うことがあります。「請求日:2026/10/12」のように書式を固定したいならFormatを使用します。Formatの結果は表示用の文字列なので、そのまま日付計算や数値集計に使うことは避けます。

日付を指定書式にそろえる

T_請求に日付/時刻型の請求日がある場合、次の式で表示します。Nullのときは未設定と示します。Formatに渡す値がNullなら結果もNullになり、それをNzで置換する構成です。表示文字列と元の請求日の両方をクエリに残しておくと、並べ替えや期間抽出に元の型を利用できます。

請求日表示: “請求日:” & Nz(Format([請求日],”yyyy/mm/dd”),”未設定”)

金額の見た目と保存値を分ける

金額を桁区切り付きで表示したいなら、Formatの書式を指定します。下の例は、Nullを0円に見せず未設定と表示します。業務で未入力と0円を区別するなら、Nz([金額],0)で置き換える前に、その判断が適切か確認してください。

金額表示: “金額:” & IIf(IsNull([金額]),”未設定”,Format([金額],”#,##0″) & “円”)
コード表示: “顧客:” & Nz([顧客コード],”未設定”)

顧客コードが短いテキスト型で”00123″なら、&でつないでも先頭ゼロを残せます。数値型の123を5桁で見せるだけならFormat([番号],”00000″)という方法がありますが、もともと何桁のコードだったかを復元する機能ではありません。桁数が不定のコードを数値で保存しないようにします。

日付書式、金額書式、文字型コードの先頭ゼロを整理する図

文字列整形・帳票出力を整理したい方へ

検証用データで手順を確かめても解決しない場合や、複数の画面・テーブル・利用者への影響を整理する必要がある場合は、Accessの教科書へご相談ください。現在の構成、起きている症状、期待する結果をまとめると、確認すべき範囲を伝えやすくなります。


フォームとレポートで結合結果を使う

画面や帳票にだけ結合結果を表示する場合は、計算テキストボックスを使います。元の姓と名などがフォームまたはレポートのレコードソースに含まれていることが前提です。レコードソースにない項目名を式へ書くと、名前を解決できずエラーやパラメーター入力の原因になります。

計算テキストボックスを追加する

1. 対象のフォームをデザインビューで開き、テキストボックスを配置します。

2. 本体の名前をtxt氏名表示など、元フィールドと違う名前にします。

3. コントロールソースに、次の式を入力します。

4. フォームビューで各顧客の結果を確認します。

=Trim(Nz([姓],””) & ” ” & Nz([名],””))

計算テキストボックスを直接編集して姓や名を保存することはできません。元の姓と名は別の連結入力欄で編集し、表示欄はその結果を示す役割にします。計算欄の名前を姓などにしてしまうと、参照が紛らわしくなるため、txt氏名表示のように区別しておくと保守しやすくなります。

改行を含める場合

住所と建物名を2行で印刷したい場合は、Chr(13) & Chr(10)を区切りとして使えます。建物名がないときは改行も加えない条件を設定してください。レポートではテキストボックスの高さや拡張可否、セクションの設定も確認します。データが正しくても、表示領域が狭ければ切れて見えます。

同じ行の結合と複数行の集約を区別する

&で行うのは、基本的に同じレコード内の値の結合です。顧客IDで2表を対応付けるJOINや、同じ顧客の複数の商品名をカンマ区切り1行へ集める処理とは別です。後者は順序、重複、Null、文字数上限を決めた集約処理が必要になります。

同じ行の文字連結、キーで行を対応付けるJOIN、複数行集約の違い

Accessの通常クエリで、SQL ServerのSTRING_AGGなどをそのまま使うことはできません。複数行の文字集約が必要なら、VBAの処理や接続先データベースでの集約など、データ量と構成に合う方法を検討します。まず元の複数行を正しく抽出できる状態にし、その後で表示形式を決めてください。


エラーの切り分けと出力前の確認

エラーが出たら、最初に[姓] & [名]のような最小の式へ戻して確認します。基本が動いたら、区切り、Nz、条件分岐、Formatを1つずつ加えます。何段階もある式を一度に修正すると、どこで期待結果が変わったのか見つけにくくなります。

症状確認点対処
構文エラー全角の記号、引用符、括弧半角記号と対応する括弧へ修正
パラメーター入力が出るフィールド名の誤り・参照先不足実際の名前とレコードソースを照合
#Name?などが出る入力場所、名前、循環参照計算欄の名前を元項目と区別
余計な空白が付く空の項目にも区切りを追加区切り文字を条件付きにする
数値や日付の表記が違う暗黙の文字変換Formatで表示を指定
長い文章が切れる表示幅、出力先、型、クエリ構造どの段階で切れるか確認

出力先でも同じ見え方か確認する

クエリの結果が正しくても、CSVをExcelで開いたときにコードが数値へ変換され、先頭ゼロが消えることがあります。CSVそのものの内容と、開く側の解釈を分けて確認してください。カンマ、引用符、改行を含む文字も、手作業で文字をつなぐCSV作成では不備の原因になります。

長い文章では、単なる列幅不足か、式・集計・DISTINCTなどによる型の扱いか、出力先の制限かを確認します。画面で短く見えることだけでデータが失われたと断定せず、実際の文字数と出力ファイルの内容を照合します。逆に、画面に出ている範囲だけで問題なしとも判断しません。

通常値、Null、空文字、長い文字、先頭ゼロの確認一覧

1. 通常の値がすべて入った行で基本結果を確認します。

2. Null、空文字、半角空白のみの行をそれぞれ試します。

3. 長い文字、全角文字、先頭ゼロ、日付と金額を確認します。

4. フォーム、レポート、CSVなど、実際の出力先でも結果を照合します。

結合した表示は必要な場所で計算し、元の項目を個別に保持するのが基本です。ただし、発行時点の住所や宛名を保存する業務では、後日のマスター変更で表示が変わらないよう、確定時の情報を別に保存する設計が必要になります。表示の便利さと履歴の要件を分けて判断してください。


よくある質問

通常の文字列結合には半角の&を使います。&は文字をつなぐ意図が明確ですが、+は加算にも使われ、値の型によって結果が変わります。また、Nullを含む+の式ではNullが伝わることがあります。意図してその性質を使う場合を除き、&とNzで空欄の扱いを明示する方が読みやすくなります。数値の1と2を&でつなげば文字列の12、数値として+で計算すれば3です。どちらの結果が必要かを区別し、全角の&を式に混ぜないようにしてください。

空欄に見えても、Null、空文字、スペースだけの文字列では保存状態が違います。また、項目が空でも区切りのスペースやハイフンを無条件に追加すると、余計な記号が残ります。Nullを空文字として扱う場合はNz([項目],””)を使い、LenやTrimで内容の有無を判定してから区切りを付けてください。ただし、未入力をエラーとして検出すべき項目まで空文字に置き換えると問題を隠します。表示の整形と入力チェックを分けて考えます。

入れられます。[姓] & ” ” & [名]のように、固定の文字を半角の二重引用符で囲みます。ハイフンなら”-“、カンマなら”,”です。項目がNullや空文字のときにも区切りを付けると、末尾の空白や余分なハイフンが残るため、内容がある場合だけ追加する式を使います。住所の場合は、建物名があるときだけ空白を入れる方法が分かりやすいでしょう。表示上の区切りを作る処理であり、元の各フィールドの保存値は変更されません。

日付をそのまま文字列へ変換すると、地域設定や既定の表示方法に影響される場合があります。表記をそろえるにはFormat([請求日],”yyyy/mm/dd”)などで書式を指定し、その結果を文字列へつなげます。Nullの日付をどう示すかも決め、未設定などの表示を用意すると分かりやすくなります。ただし、Formatの結果は文字列なので、その列で日付計算を行わないようにします。期間抽出や並べ替えには、日付/時刻型の元フィールドを残して使ってください。

コードを短いテキスト型で保存していれば、&で結合しても先頭ゼロを残せます。すでに数値型の123として保存している場合、元の桁数の情報は残っていません。常に5桁という規則があるならFormat([番号],”00000″)で00123と表示できますが、元が4桁か6桁かを自動的に復元することはできません。さらにCSVをExcelで開く際、数値へ再解釈されてゼロが消える場合があります。保存時の型と出力先での読込設定の両方を確認してください。

計算結果を表示するテキストボックスを選び、プロパティシートのコントロールソースへ=から始まる式を入力します。例えば=Trim(Nz([姓],””) & ” ” & Nz([名],””))です。ラベルの標題やテキストボックスの名前欄に式を入れるわけではありません。元の姓と名がフォームのレコードソースに含まれていることも必要です。計算欄は直接編集して元データを保存する場所ではないため、姓と名を修正する連結入力欄は別に用意します。

実現できますが、同じ行の項目を&でつなぐ操作とは別の処理です。例えば顧客ごとの複数の商品名を1つに集めるには、対象行の抽出、並び順、重複の扱い、Nullの扱いを決める必要があります。Accessの通常クエリへSQL Server用のSTRING_AGGをそのまま書いても使えません。VBAや接続先での集約などを検討します。文字列化すると個々の商品を検索・集計しにくくなるため、元の明細データは残し、必要な出力でだけ集約してください。

通常の氏名や住所表示なら、元の項目を保持し、クエリや計算テキストボックスで必要時に結合する方法が基本です。結合結果も保存すると、姓や住所を変更したときに更新漏れが起きる可能性があります。ただし、請求書発行時の宛名など、後からマスターが変わっても当時の内容を残す必要がある場合は別です。その場合は発行時点の情報として保存し、更新規則を明確にします。単なる表示用の計算か、履歴として固定すべき情報かで判断してください。

Accessの教科書へのご相談

文字列整形・帳票出力を整理したい方へ

検証用データで手順を確かめても解決しない場合や、複数の画面・テーブル・利用者への影響を整理する必要がある場合は、Accessの教科書へご相談ください。現在の構成、起きている症状、期待する結果をまとめると、確認すべき範囲を伝えやすくなります。

関連記事

Accessフォームのテキストボックスと連結

Accessクエリでグループ化して集計

Accessで2つのテーブルを比較


参考情報

Microsoft Support 式を使用して文字列値を結合する
https://support.microsoft.com/ja-jp/access/combine-text-values-by-using-an-expression

Microsoft Learn &演算子
https://learn.microsoft.com/en-us/office/vba/language/reference/user-interface-help/ampersand-operator

Microsoft Learn Nz
https://learn.microsoft.com/en-us/office/vba/api/access.application.nz

Microsoft Support 式の例
https://support.microsoft.com/en-us/access/examples-of-expressions

Microsoft Learn Format関数
https://learn.microsoft.com/en-us/office/vba/language/reference/user-interface-help/format-function-visual-basic-for-applications

TOP