AccessのTrue/Falseを数値で表す方法|True=-1・False=0と1/0変換を解説

概要

この記事の結論
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だと思い込んで計算式を作ると、合計や外部連携の値が想定とずれるため注意が必要です。

AccessのYes/No型でTrueが-1、Falseが0として扱われる基本関係を示す図
論理値表示例数値としての値意味
TrueYes/On/チェックあり-1条件を満たす・有効・選択済み
FalseNo/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として扱われます。

チェックボックスの見た目とBoolean値、True=-1・False=0の内部数値の関係を示す図
見え方/指定方法True側False側実務上の位置づけ
Yes/NoYesNoテーブルや表示形式で使う表現
True/FalseTrueFalse式・VBAで使う論理値
On/OffOnOff表示形式の一つ
チェックボックスチェックありチェックなしYes/No値を入力・表示するUI
数値表示-10式やテキストボックス等で見えることがある値

テキストボックスで表示すると-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;
AccessのクエリでYes/No型をCInt関数によりTrue=-1、False=0へ数値化する流れ

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は目的で使い分ける

AccessでTrue/Falseを数値化する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
VBAのBoolean値をCIntや数値変数への代入でTrue=-1・False=0として扱い、必要に応じ1/0へ変換する流れ
実務の考え方:条件判定では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 / -1Trueとして評価Yesのレコードを抽出
No / False / 0Falseとして評価Noのレコードを抽出
Null通常のTrue/False条件では対象外Nullを探す場合はIs Nullを使う
1・-1・0以外の数値Yes/Noの条件値として一致しない結果なしになる場合がある
AccessのYes/No型のクエリ条件でTrue・1・-1がYes、False・0が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型がTrue=-1・False=0、SQL Serverのbit型が1・0・NULLを使う違いを比較した図
項目Access Yes/No型SQL Server bit型
False00
True-11
Nullフィールド/コントロール条件により扱うNULLを保持可能
主用途Access内の二値・BooleanSQL 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のTrue/Falseを用途に応じてBooleanのまま使う、-1/0で数値化する、1/0へ変換する判断フロー
やりたいことおすすめ理由
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

TOP