Access Nullの評価について

このQ&Aのポイント
  • Nullの評価について質問があります。
  • Access2010のフォームでの値の変更をチェックし、該当レコードを更新する処理があります。
  • Nullの場合、イコールで評価できないのか質問しています。
回答を見る
  • ベストアンサー

Access Nullの評価について

お世話になります。 Access2010 フォームを作成しました。 「登録」ボタンが押されたら、フォーム上の値の変更有無をチェックし 変更がなければ何もせず、変更があった場合のみ該当レコードを更新 します。 そこで質問ですが、  If Me.AAA = Me.BK_AAA And Me.BBB = Me.BK_BBB And Me.CCC = Me.BK_CCC Then    '変更が無ければ何もしない  Else    該当レコードにAAA~CCCの値を上書き  End If としておりますが、例えばMe.CCCとMe.BK_CCCにそれぞれNullが 入っている場合、Elseになってしまいます。 ※M.BK_CCCは変更前の値が入っている 恐らく、  If Me.AAA & "@" = Me.BK_AAA & "@" ・・・ のように文字をくっつけて評価させればよいかと思うのですが、 そもそもNullの場合は、イコールで評価出来ないのでしょうか。 ご教示の程、宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

> そもそもNullの場合は、イコールで評価出来ないのでしょうか。 はい、Null を含む式の結果は Null になりますので、評価できません。 Null = Null の結果は Null Null = "@" の結果も Null > If Me.AAA & "@" = Me.BK_AAA & "@" ・・・ > のように文字をくっつけて評価させればよいかと思うのですが、 それでもいいですが、通常は Nz関数を使いますね。 If Nz(Me.AAA) = Nz(Me.BK_AAA) ・・・

naoto0216
質問者

お礼

hatena1989さま いつもご回答ありがとうございます。 >Null = "@" の結果も Null このようなケースもNullになってしまうんですね。 If Nz(Me.AAA) = Nz(Me.BK_AAA) ・・・ としてみて、それぞれNullだった場合、もとのデータが 文字列なら「if "" = "" 」、数値なら「if 0 = 0」で評価 される・・という認識でよろしいでしょうか。

その他の回答 (2)

回答No.3

> 文字列なら「if "" = "" 」、数値なら「if 0 = 0」で評価 > される・・という認識でよろしいでしょうか。 はい、いいです。 Nz(Null) = "" も Nz(Null) = 0 もTrue を返します。

naoto0216
質問者

お礼

ありがとうございます。 大変勉強になりました。

noname#231195
noname#231195
回答No.2

Nz(Me.BK_AAA) のように全部Nz関数を通してみてください。 たぶんこれで行きます。 >If Me.AAA & "@" = Me.BK_AAA & "@" ・・・ >のように文字をくっつけて評価させればよいかと思うのですが いや、おそらくうまくいかないでしょう。 エラーが出るんじゃないかと思います。試していませんが。

naoto0216
質問者

お礼

szo_orz さま ご回答ありがとうございます。 NZ関数ってのがあるんですね。 やってみたいと思います。 ちなみに、& "@"で実際にやりましたが特に問題無く評価 できたようです。 ただ、邪道なやり方だと思いますのでNZ関数を使ってみたい と思います。 ありがとうございました。

関連するQ&A

  • 複数条件のDLOOKUP文が上手く使用できない

    現在、ACCESSVBAを用いての作業を行っているのですが、 判定条件として複数条件をDLOOKUP文を使用すると実行時にエラーとなるなどして、 上手く動作しません。 おかしな点がありましたら指摘していただけますでしょうか。 対象テーブルのフィールドAAA~は全てテキスト型となっております。 Me!txtはフォーム上から取得した値、 aaaaはそこまでの処理に使用した変数、 rsはレコードセットとなっております。 レコードセットはExcelのセルを読み取ったデータが格納されており、 これらの変数はそのまえの処理で正常に取得を確認しています。 If DLookup("AAA", "TBL", _"BBB ='" & Me!txt & "'" And _"CCC = '" & aaaa & "'" And _"CCC = '" & Left(rs(1), 3) & "'") = Null Then よろしくお願いいたします。

  • Null値を無視してユニークにしたい

    下記のようなテーブルがあります。 ID  aaa  bbb 10  A01 11 12      B01 13  A02 14  A03  B02 ・IDは,主キー(レコードの登録時に,IDENTITYで自動的に取得) ・aaa,bbbは,任意のタイミングで入力や編集があるが,ユニーク性を保ちたい ・aaa,bbbの入力に関しては,下記のようなテーブルを作って自動採番にしたい Category  Last_No   A     03   B     02 (1)データベース側にて,aaa,bbbにユニークインデックスを設定すると, Null値に関しても重複違反になってしまったのですが, これは,そういうものなのでしょうか? (2)ユニークインデックスが設定できない場合に, Null値以外の値が,ユニークである事を保つためには, どうすれば良いのでしょうか? 自動採番だけでなく,編集も有り得るため,悩んでいます。 (編集は,A01-1のように,枝番を付ける場合が多いです) 以上,どなたかご教示願います。

  • アクセスで複数レコードを1レコードにできますか?

    アクセスで複数レコードを1レコードにできますか? お世話になります。 お教えください。 以下のようなレコード(テーブル)があります。 氏名 日付  金額 aaa 5/12 200 aaa 5/24 500 bbb 5/01 300 ccc 5/04 100 これを aaa 5/12 200 5/24 500 bbb 5/01 300 ccc 5/04 100 のようにデータを表示(クエリで)したいのですが どのようにしたらいいでしょうか?

  • 一部が共通の複数行を1行にまとめるには

    以下のようなテーブルがあります。 項目1  項目2  項目3  項目4 ------------------------------------------------- AAA  あああ  (NULL)  5678 AAA  あああ  1234 (NULL) BBB  いいい  @@@@ (NULL) BBB  いいい  (NULL)  **** CCC  ううう  &&&& (NULL) これを 項目1  項目2  項目3  項目4 ------------------------------------------------- AAA  あああ  1234 5678 BBB  いいい  @@@@ **** CCC  ううう  &&&& (NULL) のように項目1、2が同じ値、かつ項目3、4が(NULL)の部分を1行にまとめたいのです。 データ「CCC」の行のように項目1、2が同じものがなければ、何もせずそのまま出力もしたいです。 よろしくご教授お願いいたします。

  • 【ACCESS】重複チェック方法について

    下記のように、複数フィールドがあり、 フィールド1,2,3が全て同じレコードを抽出したいのですが 抽出する方法があれば、教えてください。 フィールド1 フィールド2 フィールド3 ・・・・ ――――――+――――――――+――――――――+――――― 12345 AAA aaa 12345 BBB aaa 12378 AAA aaa 12378 AAA bbb 23456 CCC bbb 23456 CCC bbb  ―>抽出したい!! 23456 CCC ccc

  • テーブル内の一括コピーについて

    SQLServer で テーブルAが下記のようにあり ID name subname 25 AAA NULL 28 BBB NULL 31 CCC NULL subnameの欄にIDの値と全く同じものをいれたいのですが どのようにしたらできるでしょうか? ID name subname 25 AAA 25 28 BBB 28 31 CCC 31 ↑結果的にはこうなってほしいのですが よろしくお願いします。

  • NULL値を含む場合のフィルタ

    アクセスです。 テーブルに フィールド1 フィールド2 A    B       B  C       C と入ってるとします。 フィールド2についてはNULL値のレコードもあれば、 値が入ってる場合もあります。 このテーブルをフォームにひもづけていて、(帳票フォームにしています) フォームヘッダーにテキストボックス2つとコマンドボタンがあり Private Sub コマンド_Click() Me.Form.Filter = _ "フィールド1 like '*" & Me.テキスト_1.Value & "*'" & " and " _ & "フィールド2 like '*" & Me.テキスト_2.Value & "*'" Me.Form.FilterOn = True End Sub としたときに、レコードのフィールド2に文字が入ってる場合は、抽出できるのですが、 フィールド2がNULLの場合は、1件もヒットしません。 テキスト_1にはAを入れて テキスト_2には何も入れないで検索してみると、1件もヒットしませんが、 テキスト_1にBを入れて検索すると、Bのレコードが抽出されます。 もちろん テキスト_1もテキスト_2もBをいれても、Bのレコードが抽出されます。 VBAコードで & "フィールド2 like '*" & Me.テキスト_2.Value & "*'" としてるので、NULL値でも抽出されると思ったのですがなぜ何も抽出されないのでしょうか? ワイルドカードでnull値も検索されないのでしょうか? テーブルのフィールド2のデータをNull値ではなく、””にしたら、問題なく抽出されましたが データのNull値はNull値のままにして、空白などの文字には置き換えたくないです。 (というか、すべてのNULL値に空白を入れる作業が大変なのでやりたくないです。 実際のフィールド数は50個くらいあります) よろしくお願いします。

  • 分岐SQLを一発のSQLで実現したい

    【データベース:SQLServer2005】 SQLのアドバイスを頂きたいです。 【テーブル】 テーブル名:Table1 フィールド名:種類、キー1、キー2 テーブル名:Table2 フィールド名:種類、キー1、キー2 テーブル名:Table3 フィールド名:種類、キー1、キー2 【データ】 Table1 種類、キー1、キー2 001  AAA  BBB 001  AAA  CCC 001  AAA  DDD Table2 種類、キー1、キー2 002  AAA  BBB 002  AAA  CCC NULL  AAA  DDD Table3 種類、キー1、キー2 NULL  AAA  BBB NULL  AAA  CCC NULL  AAA  DDD これをUNIONで取得します。 種類、キー1、キー2 001  AAA  BBB 001  AAA  CCC 001  AAA  DDD 002  AAA  BBB 002  AAA  CCC NULL  AAA  DDD NULL  AAA  BBB NULL  AAA  CCC 実現したいのは、 1)同種類、キー1、キー2のデータで、 種類にNULLが含まれていたら、NULLのデータは取得しない 2)同種類、キー1、キー2のデータで、 種類にNULLしかないデータは、取得する 001  AAA  BBB 001  AAA  CCC 001  AAA  DDD 002  AAA  BBB 002  AAA  CCC NULL  AAA  DDD →いる NULL  AAA  BBB →いらない NULL  AAA  CCC →いらない ↓結果 001  AAA  CCC 001  AAA  DDD 002  AAA  BBB 002  AAA  CCC NULL  AAA  DDD 上記を実現する為、UNION後のSQLでも構わないので、 一発のSQLで取得する事は可能でしょうか? 有識者の方にご享受頂ければ幸いです。 どうぞ宜しくお願い申し上げます。

  • データコンボのNullについて

    何度もすいませんm(__)m データコンボで 値が選択されてない場合は nullをデータベースに格納したいんですが、 できません。nullの使い方が不正です。と出ます。 教えてください。 VB6を使ってますデータベースはMySQLです。 Dim id As Integer If Me.DataCombo1.Text = "" Then id = Null Else id = Me.DataCombo1.SelectedItem End If datacombo1はInteger型のデータを データベースに格納します

  • アクセスからのメール送信

    現状下記のプログラムでアクセスのレポートをメールで送っています。 ToとCCにあたるところですが時々変更になるのでできればフォーム上のテキストボックスから取得したいのですができるのでしょうか。 下記のaaa@bbb.comとccc@ddd.comのところをフォーム上のテキストボックスから取得したいのです。宜しくお願い致します。 DoCmd.SendObject acSendReport, _ "rptABC", _ "PDFFormat(*.pdf)", _ " aaa@bbb.com", _ " ccc@ddd.com", _ "", _ " ABC", _ "ABC"

専門家に質問してみよう