ACCESSのフォームでチェックボックスを設けると入力される値はTrueかFalseになります。
このTrue Falseの結果を使って判定するような処理は多いでしょう。
更にTrue Falseの結果を数値に置き換えて判定するような処理も作成可能です。
今回は、True Falseを数値で表す方法をご紹介します。
こんにちは。
はこにわガジェット (@hakoniwagadget) です。
ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは使いこなすために少しスキルが必要なものの、うまく活用すればExcelよりも業務の効率化が図れます。
この記事ではACCESSの基本的な使い方をご紹介していきます。
Trueは-1、Falseは0
ACCESSでテーブルのデータ型にYes/No型を設定することができます。
Yes/No型はチェックボックスになり、チェックをした場合には値がTrue、外した場合にはFalseとなります。
このチェック結果をクエリの関数やVBAで利用する際、判定条件としてTrueやFalseを利用することはもちろん可能です。
一方で、処理によってはチェック結果を数値として扱い、更に計算をしたい場合があります。
ACCESSでは、Trueは数値では-1、Falseは0になりますので、これを知っておくと便利です。
クエリでの数値化
では、クエリを使ってTrue/Falseを数値化してみましょう。
今回は以下のテーブルを準備しました。

このテーブルをもとに、True/Falseを数値化するクエリを作成します。

上記のように、Val関数を使って「判定」フィールドの値を数値化するクエリを作成しました。
数値変換フィールドを新たに演算で作成しています。
数値変換: Val([判定])
では、データシートビューで結果を見てみましょう。

このように、「数値変換」フィールドでTrueの場合は-1、Falseの場合は0と変換されています。
この方法を知らずに、iif関数を使って処理すると
数値変換:IIf([判定]=True,-1,0)
という記述が必要になりますので、かなり簡略化できていることがわかりますね。
VBAでの数値化
次に、VBAで数値として扱う場合の処理を見てみましょう。
以下のテーブルを準備しました。

上記のtest_trueテーブルの「判定」フィールド(Yes/No型)の値を数値化して同じテーブルの「判定数値」フィールドに格納するというプロシージャを作成しました。
Public Sub true_hantei()
'変数にADOオブジェクトを代入
Set cnn = CurrentProject.Connection
Set rst1 = New ADODB.Recordset
rst1.CursorLocation = adUseClient
'レコードセットを取得
rst1.Open "test_true", cnn, adOpenKeyset, adLockOptimistic
Do Until rst1.EOF
rst1!判定数値 = rst1!判定
rst1.Update
rst1.MoveNext
Loop
'終了処理
rst1.Close: Set rst1 = Nothing
cnn.Close: Set cnn = Nothing
End Sub
テーブルの値を更新するためにADOを使っており、少し長くなっていますがTrue/Falseを数値として格納しているのは
rst1!判定数値 = rst1!判定
の部分です。
rst1!判定はYes/No型のフィールドなのでTrue/Flaseの値が入っているのですが、その値をそのまま数値型フィールドのrst1!判定数値に入れています。
では、プロシージャを実行してみましょう。
以下が、実行後のtest_trueテーブルの値です。

判定数値にTrue/Falseを数値変換した値が入っています。
このように、数値型のフィールドに格納する際はVal関数などで数値変換をしなくても自動的に数値とみなすことが可能です。
以上、True Falseを数値で表す方法をご紹介しました。
ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。
そんな時は、ACCESS開発歴20年以上、過去に300以上のACCESSデータベースの開発・修正実績のあるはこにわガジェット(@hakoniwagadget)にお任せください。
ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

最後までお読みいただき、ありがとうございました。
