- 概要
- この記事でわかること
- この記事の主な内容
- 1. AccessのTrue/Falseは数値でどう表される?|結論:True=-1、False=0
- 2. Yes/No型とチェックボックスの仕組み|表示値と内部値の違い
- 3. クエリでTrue/Falseを数値化する方法|CInt・Val・条件式を比較
- 4. True/Falseを1/0に変換する方法|IIf・Absの使い分け
- 5. VBAでTrue/Falseを数値として扱う方法|代入・型変換の基本
- 6. 実務で注意したいポイント|SQL Serverのbit型・Null・保守性
- AccessのYes/No型とSQL Serverのbit型は数値表現が違う
- 7. まとめ|Booleanはそのまま保持し、必要な場所で数値へ変換する
- 8. よくある質問(FAQ)
- 参考情報
概要
| この記事の結論 AccessのYes/No型では、Falseは0、Trueは-1として保存・数値変換されます。-1/0のまま数値として使うならCIntなどで明示的に変換でき、外部連携などでTrueを1、Falseを0にしたい場合はIIf([判定],1,0)やAbs(CInt([判定]))が分かりやすい方法です。表示上のチェックボックスやYes/Noと、数値としての値を分けて理解することがポイントです。 |
この記事でわかること
- AccessでTrue=-1、False=0になるYes/No型の基本仕様
- Yes/No・True/False・On/Off・チェックボックスと数値の関係
- クエリでTrue/Falseを-1/0へ数値化する方法とCInt・Valの違い
- Trueを1、Falseを0へ変換するIIf・Absの使い分け
- VBAでBooleanを数値として扱う方法とSQL Server連携時の注意点
この記事の主な内容
1.AccessのTrue/Falseは数値でどう表される?|結論:True=-1、False=0
2.Yes/No型とチェックボックスの仕組み|表示値と内部値の違い
3.クエリでTrue/Falseを数値化する方法|CInt・Val・条件式を比較
4.True/Falseを1/0に変換する方法|IIf・Absの使い分け
5.VBAでTrue/Falseを数値として扱う方法|代入・型変換の基本
6.実務で注意したいポイント|SQL Serverのbit型・Null・保守性
7.まとめ|Booleanはそのまま保持し、必要な場所で数値へ変換する
8.よくある質問(FAQ)
想定読了時間:約8~10分
1. AccessのTrue/Falseは数値でどう表される?|結論:True=-1、False=0
AccessのYes/No型は、TrueまたはFalseの二値を扱うためのデータ型です。Microsoftの公式仕様では、Falseは数値の0、Trueは数値の-1として保存されます。Yes/No型フィールドのサイズは1バイトです。
そのため、チェックボックスで「チェックあり/なし」と見えていても、式・クエリ・VBAなどで数値として扱うと-1と0が現れます。Trueを1だと思い込んで計算式を作ると、合計や外部連携の値が想定とずれるため注意が必要です。

| 論理値 | 表示例 | 数値としての値 | 意味 |
|---|---|---|---|
| True | Yes/On/チェックあり | -1 | 条件を満たす・有効・選択済み |
| False | No/Off/チェックなし | 0 | 条件を満たさない・無効・未選択 |
なぜTrueは1ではなく-1なのか?
VBAのBoolean型についても、MicrosoftはBoolean値を他のデータ型へ変換した場合、Falseは0、Trueは-1になると定義しています。つまり、Accessだけの特殊な表示ではなく、Accessが利用するVBAの論理値変換でも共通する仕様です。
一方で、公式資料は「なぜ設計上-1を採用したか」という歴史的理由まで説明していません。実務では理由を推測して1へ読み替えるのではなく、「Access/VBAではTrueを数値化すると-1」という仕様として扱うのが安全です。
| ポイント:Trueと1は「同じ意味」でも常に同じ数値ではありません 条件式ではTrueを意味する値として1が使える場面もありますが、Yes/No型やBooleanを数値へ変換した結果は-1です。「条件判定」と「数値変換」を分けて考えると混乱しにくくなります。 |
2. Yes/No型とチェックボックスの仕組み|表示値と内部値の違い
AccessではYes/No型の値を、フォームやレポート上でチェックボックスとして表示するのが一般的です。Microsoftも、Yes/Noフィールドにはチェックボックスを既定の表示コントロールとして用意しています。チェックありならTrue、チェックなしならFalseを表します。
重要なのは、チェックボックス自体が別の数値データを持っているわけではないことです。基になるYes/No型フィールドやコントロールの値を視覚的に見せているだけで、選択時は-1、未選択時は0として扱われます。

| 見え方/指定方法 | True側 | False側 | 実務上の位置づけ |
|---|---|---|---|
| Yes/No | Yes | No | テーブルや表示形式で使う表現 |
| True/False | True | False | 式・VBAで使う論理値 |
| On/Off | On | Off | 表示形式の一つ |
| チェックボックス | チェックあり | チェックなし | Yes/No値を入力・表示するUI |
| 数値表示 | -1 | 0 | 式やテキストボックス等で見えることがある値 |
テキストボックスで表示すると-1/0が見える
Microsoftのサポート情報では、Yes/Noフィールドをテキストボックスで表示すると、Yesは-1、Noは0として表示されると説明されています。通常はチェックボックスの方が利用者に分かりやすいため、画面ではチェック表示、計算や連携では数値という役割分担になります。
「文字列のTrue/False」と混同しない
短いテキスト型のフィールドに「True」「False」という文字列を保存した場合は、Yes/No型とは別物です。文字列を数値化する処理と、Booleanを数値化する処理では使う関数の意味が異なります。既存Accessを保守するときは、まずフィールドのデータ型を確認してください。
3. クエリでTrue/Falseを数値化する方法|CInt・Val・条件式を比較
クエリでYes/No型を数値として取り出したい場合は、計算フィールドを作る方法が扱いやすいです。元のYes/No型を数値型へ変更するのではなく、必要なクエリの出力列だけを変換すれば、データの意味を保ったまま計算や出力へ利用できます。
方法1:CIntで-1/0へ明示的に変換する
Booleanを「整数として見たい」という意図を最も明確に表しやすいのがCIntです。クエリの計算フィールドに次の式を設定すると、Trueは-1、Falseは0として取得できます。
| 判定数値: CInt([判定]) |
SQLビューでは次のように記述できます。
| SELECT [判定], CInt([判定]) AS 判定数値 FROM test_true; |

Val関数は「文字列から数値を取り出す」関数
競合記事ではVal([判定])を使ってTrue/Falseを数値化する例が紹介されています。一方、Microsoftの公式定義ではValは「文字列に含まれる数値を数値型で返す」ための関数です。Booleanから整数へ変換する目的なら、CIntの方が処理の意図を読み取りやすくなります。
既存システムでValを使っている場合に直ちに誤りと判断する必要はありません。ただし、新規に書く式では「Boolean→Integer」の変換であることを明示できるCIntを第一候補にすると、将来の保守担当者にも意図が伝わりやすくなります。
4. True/Falseを1/0に変換する方法|IIf・Absの使い分け
CSV、API、SQL Serverなど外部システムとの連携では、Trueを1、Falseを0として受け渡す仕様がよくあります。その場合はAccessの-1/0をそのまま渡さず、出力用のクエリで1/0へ変換すると境界が明確になります。
方法1:IIfで1/0を明示する
最も分かりやすいのはIIf関数です。「Trueなら1、Falseなら0」と式そのものに書くため、AccessのTrue=-1という仕様を知らない人が見ても意図を理解しやすいのが利点です。
| 判定01: IIf([判定], 1, 0) |
SQLビューでは次のようにできます。
| SELECT [判定], IIf([判定], 1, 0) AS 判定01 FROM test_true; |
方法2:Abs(CInt())で-1を1へ変換する
CIntでTrueを-1へ変換した後、Absで絶対値を取得すれば1になります。Falseは0なので、そのまま0です。式を短くできる一方、「なぜAbsを使うのか」を理解するにはTrue=-1の仕様知識が必要です。
| 判定01: Abs(CInt([判定])) True → CIntで-1 → Absで1、False → 0 → 0 |
CInt・Val・IIf・Absは目的で使い分ける

| 方法 | 戻り値 | おすすめ度 | 向いている用途 |
|---|---|---|---|
| CInt([判定]) | True=-1 / False=0 | ◎ | Access/VBAのBooleanを整数として明示的に取得 |
| Val([判定]) | 既存例で-1/0として扱われるケース | △ | 既存式の読解。公式上は文字列→数値の関数 |
| IIf([判定],1,0) | True=1 / False=0 | ◎ | CSV・API・外部システム向けに1/0を明示 |
| Abs(CInt([判定])) | True=1 / False=0 | ○ | 式を短くしたい、-1/0仕様を理解している場合 |
Nullがあり得る場合は変換ルールを先に決める
チェックボックスのTripleStateをTrueにすると、Yes・Noに加えてNull状態も扱えます。Nullを0として扱うのか、未入力としてNullのまま残すのかで業務上の意味が変わるため、単純に1/0へ押し込めない方がよいケースがあります。
たとえば「未確認」と「いいえ」が異なる業務なら、Nullを維持して三値で扱います。反対に、仕様上NullをFalseとしてよい場合だけNz等を使って0へ寄せます。変換式より先に、Nullの意味を決めることが重要です。
| 判定01: IIf(IsNull([判定]), Null, IIf([判定], 1, 0)) Nullを未入力として残したい場合の一例。NullをFalse扱いにする設計とは分けて考えます。 |
5. VBAでTrue/Falseを数値として扱う方法|代入・型変換の基本
VBAのBoolean型も、数値型へ変換するとFalse=0、True=-1になります。Microsoft Learnでは、Boolean値を他のデータ型に変換した場合にこの値になると明記されています。VBAでも「True=1」と決め打ちしないことが大切です。
CIntでBooleanをIntegerへ変換する
| Dim bln判定 As Boolean Dim int判定 As Integer bln判定 = True int判定 = CInt(bln判定) Debug.Print int判定 ‘ -1 bln判定 = False int判定 = CInt(bln判定) Debug.Print int判定 ‘ 0 |
Long型へ渡したい場合はCLngを使うこともできます。True/Falseの値そのものは-1/0なので、範囲の問題はありませんが、変数の役割に合った型を選びます。
Booleanを数値変数へ直接代入しても-1/0になる
VBAではBoolean値をIntegerやLongへ代入した場合も数値変換が行われます。既存コードで直接代入している処理を見かけることがあります。ただし、新規コードではCIntやCLngを使うと「型を変換している」ことが明確になります。
| Dim bln判定 As Boolean Dim lng判定 As Long bln判定 = True lng判定 = bln判定 Debug.Print lng判定 ‘ -1 |
1/0が必要ならVBAでも意図を明示する
外部APIへ渡す値やCSV出力用の値が1/0で決まっている場合は、Booleanの内部表現に依存せず明示的に変換します。読みやすさを優先するならIf文、短い式ならAbs(CInt())が使えます。
| Dim bln判定 As Boolean Dim lng判定01 As Long bln判定 = True If bln判定 Then lng判定01 = 1 Else lng判定01 = 0 End If |

| 実務の考え方:条件判定ではBooleanのまま使う If bln判定 Then のように、条件分岐だけが目的なら数値へ変換する必要はありません。BooleanをBooleanのまま扱った方が、コードの意味が読みやすくなります。数値化は「計算・出力・外部連携で必要なとき」に限定するのが基本です。 |
クエリの抽出条件ではTrue/1/-1をYesとして指定できる
数値化とは別に、Yes/No型の抽出条件には独自のルールがあります。Microsoftの例では、Yes・True・1・-1はいずれもYes値を検索し、No・False・0はNo値を検索します。1または-1を入力すると、Accessの抽出条件欄ではTrueへ変換されます。
| 抽出条件に入力する値 | Accessの評価 | 結果 |
|---|---|---|
| Yes / True / 1 / -1 | Trueとして評価 | Yesのレコードを抽出 |
| No / False / 0 | Falseとして評価 | Noのレコードを抽出 |
| Null | 通常のTrue/False条件では対象外 | Nullを探す場合はIs Nullを使う |
| 1・-1・0以外の数値 | Yes/Noの条件値として一致しない | 結果なしになる場合がある |

| 注意:条件式の「1」と、数値化したTrueの「-1」は別の論点です 抽出条件では1も-1もTrueとして指定できます。しかし、Yes/No型やBooleanをCInt等で数値へ変換した結果はTrue=-1です。外部システムへ1/0で渡す場合は、IIfなどで明示的に変換してください。 |
6. 実務で注意したいポイント|SQL Serverのbit型・Null・保守性
True/Falseの数値化でトラブルが起きやすいのは、Accessの中だけで完結せず、CSV・API・SQL Serverなど別の仕様と接続するときです。AccessではTrue=-1ですが、SQL Serverのbit型は0、1、NULLを取るため、連携境界で変換ルールを決めておく必要があります。
AccessのYes/No型とSQL Serverのbit型は数値表現が違う

| 項目 | Access Yes/No型 | SQL Server bit型 |
|---|---|---|
| False | 0 | 0 |
| True | -1 | 1 |
| Null | フィールド/コントロール条件により扱う | NULLを保持可能 |
| 主用途 | Access内の二値・Boolean | SQL ServerでのBoolean相当 |
| 連携時のポイント | 外部仕様が1/0なら変換 | 受け渡し値を0/1/NULLで定義 |
Microsoft Learnでは、SQL Serverのbit型は1、0、NULLを取る整数データ型で、文字列TRUEは1、FALSEは0へ変換されると説明されています。AccessからSQL Serverへアップサイジングする場合は、既存VBAやクエリが-1を数値として前提にしていないか確認します。
Yes/No型と数値列を二重に保存しない
「判定」と「判定数値」の両方をテーブルへ保存すると、片方だけ更新されて値が食い違うリスクがあります。基本はYes/No型を正本として保持し、必要なクエリや出力処理で計算列として-1/0または1/0へ変換します。
外部システム側の物理仕様として数値列が必須など、二重保持に合理的な理由がある場合は、更新ルールを一元化します。フォームのイベントごとに個別変換を散らすより、保存・出力の共通処理へまとめる方が保守しやすくなります。
CSV・API連携では「True/False」「-1/0」「1/0」を仕様書に書く
同じ「Boolean」でもシステムによって受け付ける表現が異なります。CSVでは1/0、JSONではtrue/false、SQL Serverではbitの1/0/NULLというように、連携先の仕様に合わせます。Access側の内部値をそのまま渡さず、インターフェース仕様で表現を固定してください。
用途別のおすすめ変換方法

| やりたいこと | おすすめ | 理由 |
|---|---|---|
| Access内で条件分岐したい | BooleanのままTrue/Falseで判定 | 数値化せず意味が明確 |
| クエリで数値として確認したい | CInt([判定]) | Boolean→Integerの意図が明確 |
| CSV/APIへ1/0で出したい | IIf([判定],1,0) | 出力仕様を式に明示できる |
| 短い式で1/0へ変えたい | Abs(CInt([判定])) | -1/0仕様を理解していれば簡潔 |
| SQL Serverへ移行・連携したい | 境界で-1/0⇔1/0を定義 | bit型との数値差を吸収できる |
| Nullも意味を持つ | 三値のまま扱う/仕様を定義 | 未入力とFalseを混同しない |
| 実務視点 True/Falseを数値へ変換できることより、「どこで変換するか」を揃える方が重要です。Yes/No型は原則Booleanのまま保持し、CSV・API・SQL Serverなど外部との境界で必要な形式へ変換すると、判定ロジックの二重管理や-1/1の取り違えを防ぎやすくなります。 |
True/Falseの扱いやデータ連携で既存Accessが複雑化している場合は
単純なTrue/Falseの数値変換であれば、ここまでの式で対応できます。一方、複数のクエリやVBAに-1/0・1/0変換が散在している、CSV/API仕様と合わない、SQL Server移行後に判定が崩れた、といった場合は全体のデータ設計と処理経路を確認した方が安全です。
既存Accessの調査、クエリ・VBA改修、データ連携の整理、SQL Server/Azure SQLへのアップサイジングまで対応しています。担当者退職などで仕様が分からない場合も、現行ファイルの解析から整理できますのでお気軽にご相談くださいませ。
7. まとめ|Booleanはそのまま保持し、必要な場所で数値へ変換する
AccessのYes/No型では、Falseは0、Trueは-1として保存・数値変換されます。チェックボックスはその値を分かりやすく表示・入力するためのコントロールであり、チェックありの値も-1、なしは0です。
クエリで-1/0を取得するならCIntが意図を示しやすく、外部連携で1/0が必要ならIIf([判定],1,0)が分かりやすい方法です。Abs(CInt([判定]))でも1/0へ変換できますが、True=-1の仕様を理解していることが前提になります。
また、SQL Serverのbit型は1/0/NULLを使うため、Accessの-1/0と同じ数値表現ではありません。BooleanはBooleanのまま正本として持ち、必要な出力・連携の境界だけで形式を変える設計にすると、保守性と移行性を高めやすくなります。
8. よくある質問(FAQ)
MicrosoftのAccess/VBA仕様では、Booleanを数値として扱う場合にFalse=0、True=-1と定義されています。公式資料は採用理由まで説明していないため、実務では「Trueを数値化すると-1」という仕様として扱うのが安全です。
クエリなら IIf([判定],1,0) が分かりやすい方法です。TrueとFalseの戻り値を式に明示できるため、CSVやAPIなど1/0を求める外部連携にも向いています。
Booleanを整数へ変換する目的ならCIntを推奨します。ValはMicrosoft公式では文字列中の数値を数値型として返す関数です。既存式でValを見かけることはありますが、新規実装ではCIntの方が意図が明確です。
はい。Microsoftのクエリ条件例ではYes、True、1、-1はいずれもYes値として評価されます。No、False、0はNo値として評価されます。ただし、数値化したTrueの結果そのものは-1なので、条件指定と数値変換は別のルールとして理解してください。
どちらもBoolean相当の値を扱いますが、数値表現は同じではありません。AccessはTrue=-1/False=0、SQL Serverのbit型は1/0/NULLです。連携・移行時は変換ルールを明示します。
通常はTrue/Falseですが、AccessのチェックボックスでTripleStateをTrueにするとNull状態も扱えます。未入力とFalseを区別する業務では、Nullを無理に0へ変換しない方がよい場合があります。
外部仕様など明確な理由がない限り、Yes/No型を正本として保持し、必要時にクエリで数値化する方が管理しやすくなります。Yes/No型と数値列を二重保存すると、更新漏れで不整合が起きる可能性があります。
参考情報
● Microsoft Support|Accessデスクトップデータベースのデータ型
https://support.microsoft.com/ja-jp/access/data-types-for-access-desktop-databases
● Microsoft Support|チェックボックスコントロールを追加してYes/No型の値を表示する
https://support.microsoft.com/ja-jp/access/add-a-check-box-control-to-show-yes-no-values
● Microsoft Support|データ型変換関数
https://support.microsoft.com/ja-jp/access/type-conversion-functions
● Microsoft Support|Val関数
https://support.microsoft.com/ja-jp/access/val-function
● Microsoft Support|IIf関数
https://support.microsoft.com/ja-jp/access/iif-function
● Microsoft Support|Abs関数
https://support.microsoft.com/ja-jp/access/abs-function
● Microsoft Support|クエリの抽出条件の例
https://support.microsoft.com/ja-jp/access/examples-of-query-criteria
● Microsoft Learn|Booleanデータ型(VBA)
https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/boolean-data-type
● Microsoft Learn|CheckBox.TripleStateプロパティ(Access)
https://learn.microsoft.com/ja-jp/office/vba/api/access.checkbox.triplestate
● Microsoft Learn|bit(Transact-SQL)
https://learn.microsoft.com/ja-jp/sql/t-sql/data-types/bit-transact-sql