Access2000で入力されていない値でエラーが発生する問題の回避方法

このQ&Aのポイント
  • Access2000で特定の値が入力されていない場合にエラーが発生する問題があります。この問題を回避するためには、以下の手順を実行してください。
  • まず、「F_年度別」というフォームに必要な項目を入力します。次に、コマンドボタンをクリックして「T_年度別」というテーブルを作成します。その後、「T_会社ID」と「T_年度別」を使用して「Q_年度別」というクエリを作成します。最後に、「Q_年度別」を基に「R_年度別」というレポートを作成します。
  • しかし、現在の設定では、特定の値(例:「D」)が入力されていない場合にエラーが発生します。「D」以外の値(例:「A」や「C」)のみが該当する場合、エラーメッセージが表示されます。
回答を見る
  • ベストアンサー

Access2000で入力されていない値で出るエラーを回避したい。

Ac2000です。 「F_年度別」というフォームに ・データ年度 ・データ種類 ・Aの値段 ・Bの値段 ・Cの値段 ・Dの値段 という項目があり、これらに入力をして、コマンドボタンをクリックすると、 「T_年度別」というテーブルが作成されるようになっています。 この「T_年度別」と「T_会社ID」を使って「Q_年度別」というクエリを作成しました。 「T_年度別」 ・データ年 ・データ種類・ ・ランク(上記のA~Dのこと) ・会社グループID 「T_会社ID」 ・会社グループID ・会社グループ (会社グループIDにリレーション) 「Q_年度別」はクロス集計クエリで、 ・会社グループID   グループ化   行見出し ・会社グループ    グループ化    行見出し ・ランク         グループ化    列見出し ・データ種類     カウント       値 ・データ種類     カウント       行見出し となっています。 この「Q_年度別」をもとに「R_年度別」というレポートを作成しています。 手順自体は間違いではなく、ちゃんと合っていて、表示されるのですが、 ランクで、たとえば「D」の入力がなかった場合(A~Cしか該当がなかった場合)に エラーになってしまうのです。 エラーは以下の通りです。 ------------------------------------------------------------ 実行時エラー:'3070'; 'D'を有効なフィールド名、または式として認識できません。 ------------------------------------------------------------ このエラーを回避し、スムーズに表示させるためにはどのようにしたらいいのでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • paz777
  • ベストアンサー率47% (77/163)
回答No.1

こんにちは。 以下の方法で回避できませんか? 1.「Q_年度別」のクロス集計結果の形のテーブルを作成する。  「T_年度別集計」  項目  ・会社グループID  ・会社グループ  ・A  ・B  ・C  ・D  注意:A~Dまではちょっとあやふやです。     実際のクロス集計の結果と合わせてください。 2.「T_年度別集計」のレコードを削除するクエリーを作成する。  「Q_年度別集計_全削除」 3.「Q_年度別」をクロス集計クエリーから追加クエリーに変更し、追加先に  「T_年度別集計」を指定する。 4.「R_年度別」のレコードソースを「Q_年度別」から「T_年度別集計」に変更する。 5.実行の手順を  「Q_年度別集計_全削除」クエリー実行  「Q_年度別」クエリー実行  「R_年度別」レポートを開く つまり、想定されるクロス集計結果の項目を先にテーブルとして作っておけば、 クロス集計に値が無くても項目はあるのでレポート等ではエラーが発生しない と言うわけです。 こんなので分かりますか? ではでは・・・

KODAMAR
質問者

お礼

早速の回答ありがとうございます。 大体の流れは理解できました。 >3.「Q_年度別」をクロス集計クエリーから追加クエリーに変更し、追加先に > 「T_年度別集計」を指定する。 とありますが、これはいったいどのようにしたら・・・? クロス集計クエリから追加クエリにすると、カウントの数がおかしくなってしまうのです。 クロス集計の結果は以下のような感じになっています。 -------------------------------------------------- 会社グループID | 会社グループ | データ種類のカウント | <> | A | B | C |    120      | ○○      |     4         |  4   |   |   |   |    130      | □□      |     40        |      | 3 | 5 | 32 |    170      | △△      |     1          |     | 1 |   |   | -------------------------------------------------- こちらのやり方が違うのだとは思うのですが、わからないので、 申し訳ありませんが、もう一度よろしくお願いします。

その他の回答 (1)

  • paz777
  • ベストアンサー率47% (77/163)
回答No.2

すっすいませ~ん! ごめんなさい!間違っていました。 >3.「Q_年度別」をクロス集計クエリーから追加クエリーに変更し、追加先に > 「T_年度別集計」を指定する。 のところですが、 「Q_年度別」のクロス集計クエリーはそのままで、「Q_年度別」を表示する クエリーを作っていただき、そのクエリーを追加クエリーにしてください。 クエリー「新規作成」→「デザインビュー」を選択→「テーブルの表示:Q_年度別」 を選択→「フィールド」に「Q_年度別.*」、クエリーの種類「追加」に変更→ 追加先に「T_年度別集計」 としてください。

KODAMAR
質問者

お礼

再び回答ありがとうございます。 言われた通りのことを私もなんとなくながらやってみたら できているようです。 ですので、この方法で行こうと思います。 ありがとうございました。

関連するQ&A

  • Accessのクエリの結果で。。。

    Access2000です。 「T_マスタ」 ・ID ・名前 ・会社名 「T_サブ」 ・ID ・年度 ・種類 「T_備考」 ・ID ・年度 ・種類 ・備考 というようなテーブルが3つあります。 これらを検索するために、すべてを入れた「Q_検索」というクエリを作成しました。 リレーションは T_マスタ:ID - T_サブ:ID T_サブ:ID - T_備考:ID T_サブ:年度 - T_備考:年度 T_サブ:種類 - T_備考:種類 となっています。 入力例として 「T_マスタ」 1  山田太朗  ●●株式会社 2  前田前   □□店 3  大坪拳   △△有限会社 「T_サブ」 1  2001  お中元 1  2002  お歳暮 1  2002  お中元 2  2001  お歳暮 2  2002  お中元 3  2001  お歳暮 「T_備考」 1  2001 お中元  お菓子 1  2002 お中元  水菓子 2  2002 お中元  果物 3  2001 お歳暮  ケーキ となっていたとすると、希望では、「Q_検索」クエリの結果が 6件となっていてほしいのに、実際は3件(T_マスタの件数分)しか出てこないのです。 これをすべて反映させるためにはどうしたらいいのでしょうか?

  • Accessの条件つき抽出>テーブル作成。

    「T_マスタ」 ・氏名ID ・氏名 ・会社グループ 「T_サブ」 ・氏名ID ・データ年 というようなテーブルがあり、この2ツから「Q_検索」というクエリを作成しています。 このクエリを元に検索フォームを作成しました。 この検索フォームで「データ年」を選んで「エクスポート」を押すと、 会社グループが「110」のものだけを抽出して「T_Excel_110」という テーブルが作成されるようにしたいのです。 「エクスポート」ボタンのコードは ---------------------------------------- (検索用のコード)省略 DoCmd.RunSQL "SELECT [T_マスタ].[氏名ID], [T_マスタ].[氏名], [T_マスタ].[会社グループ],[T_サブ].[データ年], INTO T_Excel_110" _ & " FROM (T_マスタ INNER JOIN T_サブ ON [T_マスタ].[氏名ID]=[T_サブ].[氏名ID]) " _ & " WHERE ((([T_マスタ].[会社グループID])="110"))" & WhereCond stDocName = "T_Excel_110" DoCmd.OpenTable stDocName, acNormal, acEdit MsgBox "[ファイル]-[エクスポート]でExcelファイルを指定してください。" としたのですが、エラーになってしまいます。 いったいどこを直せばいいのでしょうか?

  • andとiifの使用。

    ID | データ種類 | データの数 | ランク という集計クエリを作成しています。 ID、データ種類、ランクはグループ化してあり、 さらにデータ種類はフォームで選んだもので抽出するように抽出条件が設定してあります。 データの数は、「Iif([データ種類]="","",1)」という条件で計算してあり、 集計は「演算」になっています。 クエリの結果は ID  |データ種類|データ数 |ランク 110 | お中元 |  4  | A 110 | お中元 |  3  | B 120 | お中元 |  8  | A 120 | お中元 |  6  | B というようなカンジになっています。 このクエリを元にレポートを作成したいのです。 レポートの状態としては  ID  | Aランク | Bランク | Cランク・・・  110 |   4   |   3   |  8  120 |    8  |   6   |  1  130 |   10  |   11  |  7 というように表示したいのです。 以前はランクごとにクエリを作成して、レポートに組み込んでいたのですが、 もっとすっきりさせたいと思い、作成しなおしています。 andとiifを使って条件を指定してできるかな、と思ったりしたのですが、 いいアイディアが浮かばない状態です。 どのようにしたらうまくいくでしょうか? やはりランクごとにクエリを作成しないとダメでしょうか? わかりづらい文章ですけど、宜しくお願いします。

  • 別シートの値を自動入力したい

    大変お世話になっております。  関数式を使って、別シートの値を自動入力させたいのですが、エラーが出てしまいます。 関数式が誤っている事は確かなのですが、どのような式にしたらエラーが出なくなるのか分からず困っております。 お分かりでしたら、ご教示頂けると大変助かります。 やりたい事は、以下の通りになります。 [データ入力]シートのA列に手入力した装置IDの値が、[装置マスタ]シートのE列にあったら、 [データ入力]シートのB列に[装置マスタ]のD列同行の装置名を自動入力する。 [データ入力]シートのC列に[装置マスタ]のB列同行のステーション名を自動入力する。 [データ入力]シートのD列に[装置マスタ]のC列同行のグループ名を自動入力する。 [データ入力]シートのB列、C列、D列に以下の式を入力すると、 値は入力出来ていますが、下記のようなエラーがでます。 =IFERROR(INDEX(装置マスタ!B:E,MATCH(A3,装置マスタ!E:E,0),3),"") =IFERROR(INDEX(装置マスタ!B:E,MATCH(A3,装置マスタ!E:E,0),1),"") =IFERROR(INDEX(装置マスタ!B:E,MATCH(A3,装置マスタ!E:E,0),2),"") 【エラー内容】 1つ以上の循環参照が発生しています。循環参照とは、数式が直接的または間接的に自身のセルを参照している状態を指します。 これにより、計算が正しく行われない可能性があります。 循環参照を削除または変更するか、数式を別のセルに移動して下さい。 【装置マスタのデータ】 ステーション名,グループ名,装置名,装置ID,基準額   B列、    C列、  D列、E列、 F列    高木,Aグループ,掘削装置1,PP0001,10000 高木,Aグループ,掘削装置2,PP0002,10000 高木,Bグループ,掘削装置3,PP0003,10000 田中,Bグループ,掘削装置4,PP0004,10000 田中,Cグループ,掘削装置5,PP0005,50000 田中,Cグループ,掘削装置6,BB0207,20000 今井,Dグループ,掘削装置7,DD0008,10000 今井,Dグループ,掘削装置8,PP0009,10000 今井,Dグループ,掘削装置9,PP0010,20000

  • ACCESSの条件について

    何時も大変お世話になっております。 windows7 ACCESS2007(初心者レベルです) の環境になります。 ACCESSのシステムを作成しており、こちらでの書き込みを参考にさせて頂いた事により、一つ問題が解決したのですが、新たな問題が発生してしまいましたので、ご質問をさせて頂きます。 解決しましたsql文 SELECT T_○.URL, T_○.日, T_○.時, T_○.マシン名, T_○.ユーザ名, T_○.タイトル, T_○.IPアドレス, T_○.グループ名, T_○.ホストID, T_○.登録日時 INTO T_●1 IN 'D:\LOG\Database1.accdb' FROM T_○, T_条件 IN 'D:\LOG\Database1.accdb' WHERE (((T_○.URL) Like Choose([T_条件].[SP],"","*","*") & [T_条件].[FN] & Choose([T_条件].[SP],"*","*",""))); 上記により大量にあります条件をテーブルから呼び出して無事に抽出が可能となりました。 そこで今回は逆のパターン(上記の抽出から外れたデータ)を別テーブルに作成したく以下のsql文を作成してみました。 SELECT T_○.URL, T_○.日, T_○.時, T_○.マシン名, T_○.ユーザ名, T_○.タイトル, T_○.IPアドレス, T_○.グループ名, T_○.ホストID, T_○.登録日時 INTO T_除外データ IN 'D:\LOG\Database1.accdb' FROM T_○, T_条件 IN 'D:\LOG\Database1.accdb' WHERE (((T_○.URL) Not Like Choose([T_条件].[SP],"","*","*") & [T_条件].[FN] & Choose([T_条件].[SP],"*","*",""))); 結果、同じ内容のレコードが100件以上に膨れ上がりデータが莫大な物になってしまいました。 つたない文章とsql文で大変申し訳ございませんが、なぜ同じレコードが何件も出来てしまうのでしょうか? ご指摘及びアドバイスを頂けますと幸いでございます。

  • アクセスクエリで特定のみをグループ化

     いつもお世話になっております。  Access2007を使用しています。  さて、アクセスのクエリにおいて、特定のデータだけグループ化したいのですが、やり方が分かりません。理想は、下記例のとおりです。 【例】 テーブル名:T_地区 ID 地区名 会費 1  A   100 2  A   100 3  B   100 4  C   100 5  C   100 6  D   100 7  D   100 8  E   100 9  E   100 10 E   100 クエリ名:Q_地区_グループ化 IDの件数 地区名(グループ化) 会費の合計 2件    A          200 1件    B          100 1件    C          100 1件    C          100 2件    D          200 3件    E          300 ※Cは同名ですが、別々の地区となるため、C地区のみグループ化ならないようにしたいです。  どうかご教示を、よろしくお願いいたします。

  • Access 検索した値を別フォームに

    Accessのシステムを会社で作ってます。 検索したIDをサブフォーム(データシート型) で表示したレコードを編集フォーム(別フォーム)に呼び出したいのですが上手く出来ません。 ネットでも検索しましたが良いのがありませんでした。 どなたか、お手数ですがコードを教えていただけないでしょうか? 何卒よろしくお願いします。 *adodbとDAOのどちらか使う必要があるならDAOを使用して作成したいです。 *クエリは使わずに作成したいです。 ○検索フォーム 検索ボタン ID入力テキスト 編集ボタン サブフォーム(データシート型) 編集ボタンを押すと ○編集フォーム 単帳型 *レコード項目 ID プロジェクト名 日付 モジュールNO

  • アクセスフォームについて教えて下さい。

    アクセスフォームについて教えて下さい。 テーブル T_設備 設備管理No. 状態ID(フィールドプロパティ→コンボボックス) 分類ID(フィールドプロパティ→コンボボックス) 設備名 (その他項目あり) T_状態 ID  001  稼動中 002  停止中 T_分類 ID 001  専用機 002  マシニング T_設備、T_状態、T_分類はリレーションシップを組んでいます。 クエリ T_設備を元にクエリを作成 Q_設備 (全データを表示) 稼動中の設備を抽出 Q_稼働設備 停止中の設備を抽出 Q_停止設備 フォーム Q_稼働設備を元にフォームを作成 F_稼働設備一覧(表形式) Q_稼働設備を元にフォームを作成 F_稼働詳細(単票形式) 表形式のフォーム(F_稼働設備一覧)にコマンドボタン(コマンド1)を作成、 OPENFORMメソッドでクリックした行のデータを表示させるようにしました。 (単票形式のF_稼働詳細でデータの詳細を確認したい) Private Sub コマンド1_Click() DoCmd.OpenForm "F_設備詳細" Forms!F_設備詳細!設備管理No. = Forms!F_稼働設備一覧!設備管理No. End Sub しかし、コンボボックスの内容を変更(稼動中から停止中へ)し、フォームを閉じ、 再度F_稼働設備一覧を開くと、データがQ_停止設備へ移動しておらず、 コンボボックスも稼動中に戻ってしまっています。 コマンド1ボタンからではなく、直接F_設備詳細を開き、コンボボックスの停止中を 選択した場合は、データはQ_停止設備へ移動します。 OpenFormメソッドの記入に問題があるのでしょうか? 色々と試しましたが、解決できませんでした。 よろしくお願いいたします。   

  • access クエリにて在庫数を出したい

    お世話になります。 accessにて在庫管理DBを構築しています。 在庫数を出そうとすると、「あいまいな外部結合が含まれているので、SQLステートメントを実行できません。 いずれかの結合を最初に実行するために、第1次結合を実行する分割クエリを作成し、 SQLステートメントにそのクエリを含めてください。」とエラーが出てしまいます。 なにぶん初心者の為、ちんぷんかんぷんです。 ご教授の程よろしくお願い致します。 t_薬剤マスター 薬剤区分ID、薬剤名、包装内容、包装量、単位、薬価 t_店舗 店舗ID、店舗名 q_入庫数の合計 店舗ID、店舗名、薬剤ID、薬剤名、入庫数の合計、小分入庫数の合計、入庫総合計 q_出庫 店舗ID、店舗名、薬剤ID、薬剤名、出庫数の合計 q_在庫 在庫ID、店舗ID、店舗名、薬剤ID、薬剤名、在庫数 とあります。 t_薬剤マスターとt_店舗から、 それぞれのクエリ、(q_入庫、q_出庫、q_在庫)に 「't_薬剤マスター'の全レコードと'q_入庫'の同じ結合フィールドのレコードだけを 含める。」結合を設定しました。 そして下記の様にクエリを作成 フィールド 店舗ID  店舗名    薬剤ID       薬剤名 ____________________________ テーブル t_店舗  t_店舗     t_薬剤マスター  t_薬剤マスター フィールド 在庫数   入庫総合計     出庫数の合計       ____________________________ テーブル q_在庫マスター q_入庫数総合計  q_出庫数合計        フィールド  在庫数: [在庫数]+[入庫総合計]-[出庫数の合計]    ____________________________ テーブル  と作成しました。。。。が実行するとエラーメッセージが出てきてしまいます。 これは結合が悪いと言う事でしょうか? よろしくお願い致しますm(__)m

  • Access2010 イベントプロシージャのエラー

    Accessの初心者です。テキストを読みながら、フォームに配置したコンボボックスにイベントプロシージャを設定して実行したところ、エラーメッセージ表示されました。どなたか御指導頂ければ幸いです。 1.関連するオブジェクト a) 一側テーブル名: T_選手プロフィール  このテーブルに「ID_選手プロフィール」という主キーフィールドがあります。 b) 多側テーブル名: T_期間成績  このテーブルに「選手プロフィール親ID」というフィールドがあります。 * リレーションシップウィンドウで「ID_選手プロフィール」と「選手プロフィール親ID」にリレーションシップを設定しました。 c) クエリ名: Q_期間成績_現役選手プロフィール  このクエリの中に、「ID_選手プロフィール」と「氏名」と「登録番号」というフィールドがあります。 d) フォーム名: F_期間成績 サブフォーム「T_期間成績明細」を中に入れたフォームを作成しました。 2.フォーム上での操作 a) フォーム「F_期間成績」に、コンボボックス「登録番号_コンボ」というコンボボックスを配置しました。 b) このコンボボックスのコントロールソースは、c)の「Q_期間成績_現役選手プロフィール」の「選手プロフィール親ID」です。 c) このコンボボックスで選択した「ID_選手プロフィール」という値に対応する、「氏名」をフォームに新たに配置した非連結のテキストボックス「氏名_テキスト」に、「Q_期間成績_現役選手プロフィール」の「氏名」フィールドの値を表示させようとしています。 d) 「登録_コンボ」コンボボックスの更新後処理からコードビルダーを起動し、テキストを参照しながら以下のコードを書きました。 Private Sub 登録番号_コンボ_AfterUpdate() Name = DLookup("[氏名]", "Q_期間成績_現役選手プロフィール", "登録番号=登録番号_コンボ") If Not IsNull(Name) Then 氏名_テキスト = Name End If End Sub e) フォームにてコンボボックスを操作したところ、「実行時エラー '94': Nullの使い方が不正です。」という実行時エラーが表示されました。色々と試してみましたが、上手くいきませんでした。 分かりにくい説明で恐縮ですが、宜しくお願い致します。

専門家に質問してみよう