ACCESS2010 データ一致でテキストを返す

このQ&Aのポイント
  • ACCESS2010でクエリー内の計算式について質問です。クエリー内にフィールド1とフィールド2があり、この中のデータの組み合わせによって別のフィールドにテキストのコメントを返すための計算式を教えてほしいです。
  • 例えば、フィールド1が'A'でフィールド2が'1'であった場合はフィールド3に'当たり'というテキストを返し、他の組み合わせではブランクもしくは異なるテキストを返したいです。
  • IIf関数を使用して計算式を作成しましたが、うまく動作しません。一つのフィールドを対象にした場合は問題なく表示されますが、複数のフィールドを組み合わせた場合にエラーが発生します。どのような計算式を使用すれば良いか教えてください。
回答を見る
  • ベストアンサー

ACCESS2010 データ一致でテキストを返す

ACCESS2010でクエリー内の計算式について質問です。 クエリー内にフィールド1とフィールド2があり、この中のデータの組み合わせによって別のフィールドにテキストのコメントを返すための計算式を教えていたたきたいのです。 例:同一のレコードで、フィールド1が”A”でフィールド2が”1”であった場合、フィールド3に”当たり”といったテキストを返したい。 そのほかの組み合わせであった場合はブランクのままとするか、そのパターンによってテキストを変えたいのです。(Bと2の組み合わせではずれ、Cと3の組み合わせでもう一回、それ以外はブランク) フィールド1 フィールド2 フィールド3    A      1     当たり    B      2     はずれ    C      3     もう一回 IIf 関数を使ってチャレンジしてみたのですが、エラーが出てうまくいきません。 一つだけのフィールドを対象とした場合、下記の計算式で表示されるのですが、複数となった場合うまくいきません。 式1: IIf([フィールド1]="A","当たり") よろしくお願いします。

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

解決しましたか。方法はいろいろありますが、質問に合わせてIIf関数を 使うならば、IIfの入れ子を行ないます。以下のように。 判定1:IIf([フィールド1]="A"AND[フィールド2]="1","当たり",IIf([フィールド1]="B"AND[フィール2]="2","はずれ",IIf([フィールド1]="C"AND[フィールド2]="3","もう一回",""))) あるいは、ユーザー定義関数を作成して処理を行なう方法もあります。 たとえば、以下の二つの関数は同じ動作をします。 Function cmdJudge1(ByVal fld1 As String, ByVal fld2 As String) As String Select Case True Case fld1 = "A" And fld2 = "1" cmdJudge1 = "当たり" Case fld1 = "B" And fld2 = "2" cmdJudge1 = "はずれ" Case fld1 = "C" And fld2 = "3" cmdJudge1 = "もう一回" Case Else cmdJudge1 = "" End Select End Function Function cmdJudge2(ByVal fld1 As String, ByVal fld2 As String) As String If fld1 = "A" And fld2 = "1" Then cmdJudge2 = "当たり" ElseIf fld1 = "B" And fld2 = "2" Then cmdJudge2 = "はずれ" ElseIf fld1 = "C" And fld2 = "3" Then cmdJudge2 = "もう一回" Else cmdJudge2 = "" End If End Function これらの関数を使用する場合は、標準モジュールにそのまま貼り付け、保存し、 クエリの中から呼び出します。 IIf関数と二つの関数の挙動を確認するために以下のSQL文を新しい クエリのSQLビューに貼り付け確認してみてください。 SELECT テーブル2.フィールド1, テーブル2.フィールド2, IIf([フィールド1]="A" And [フィールド2]="1","当たり",IIf([フィールド1]="B" And [フィールド2]="2","はずれ",IIf([フィールド1]="C" And [フィールド2]="3","もう一回",""))) AS 判定1, cmdJudge1([フィールド1],[フィールド2]) AS 判定2, cmdJudge2([フィールド1],[フィールド2]) AS 判定3 FROM テーブル2; IIf関数を使った場合と、二つの関数のいづれかを使った結果は 多分、同じだと思いますが。

kuwacchi2010
質問者

お礼

IIf関数およびユーザー定義関数どちらでもできました。 非常に参考になりました。ありがとうございました。

その他の回答 (1)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

No1です。回答の最後のあたりの以下のSQL文の中で、 SELECT テーブル2.フィールド1, テーブル2.フィールド2, IIf([フィールド1]="A" And [フィールド2]="1","当たり",IIf([フィールド1]="B" And [フィールド2]="2","はずれ",IIf([フィールド1]="C" And [フィールド2]="3","もう一回",""))) AS 判定1, cmdJudge1([フィールド1],[フィールド2]) AS 判定2, cmdJudge2([フィールド1],[フィールド2]) AS 判定3 FROM テーブル2; テーブル2がいくつかでてきますが、、これはこちらで作成 したテーブル名なので実際に合わせて変更してください。

関連するQ&A

  • ACCESS IIF関数 複数条件の設定について

     選択クエリにおいて、あるフィールド「 X」 のレコード数値が     0<[X]<=50   であれば A    50<[X]<=100  であれば B    100<[X]<=150  であれば C  と表記させるフィールド「Y」を追加したいと考えています。  この場合、Yのフィールド設定で指定する数式についてご教授願います。  一応、   IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")   としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。  何卒よろしくお願いいたします。

  • Accessで連続データってできますか?

    Aテーブル(データベース)からBテーブルに必要なレコードを抽出して、Bテーブルで編集しています。 Bテーブルで編集したレコードをCテーブルに移動する際に、連続データのフィールドが必要になったので、テーブルのオートナンバー型フィールドを一つ追加しましたが、うまくいきません。 追加クエリでB→Cに移動させるんですが、キー違反がでてクエリが動きません。 できれば、クエリで連続データを作成して、Cテーブルに追加させたいんですが、クエリで連続データって作れるものなのでしょうか?

  • Access2013で翌日のデータのみのクエリ

    お世話になります。 Access2013を使用しており、2つの日付フィールドを比較して 翌日のレコードのみ抜き出したい場合のクエリについて質問で ございます。 日付Aフィールド と 日付Bフィールドが あり、それぞれ日付と時刻が書式yyyy/mm/dd hhmmss で格納されております。 このうち、クエリで抽出したいのは、 日付Bフィールドに格納されている、 日付Aフィールドの翌日のレコードのみを 抽出したいです。 その際、時刻(hhmmss)は無視して翌日のレコードを 抽出したいです。 例えば、 日付Aフィールドに 2016/08/24 15:00:00 2016/08/24 16:00:00 2016/08/24 17:00:00 というデータが格納されていて、 日付Bフィールドに 2016/08/25 00:00:00 2016/08/25 17:00:00 2016/08/26 00:00:00 というデータが格納されていた場合、 日付Bフィールドの 2016/08/25 00:00:00 2016/08/25 17:00:00 のみ抽出したいです。 この場合のクエリの設定方法を教えてください。 どうぞ宜しくお願いいたします。

  • 【access】複数のフィールドの不一致クエリ

    アクセスはまったくのド素人です。 OS:WindowsXP バージョンは2000です。 A,Bのテーブルがあり、それぞれのレコードは以下の通りです。 A a b c 1 4 7 2 5 8 3 6 9 5 6 8   B  d e f 5 6 8 1 4 7 2 1 3 4 4 6 d,e,fのフィールドがa,b,cと一致しないレコード(ここでは『2 12 13』と『2 1 3』)をクエリで抜き出したい時はどうすればよいでしょうか? d,e,fに『Is Null』を指定して不一致クエリを実行しても思うように行きませんでした。

  • Access #エラーについて

    Access初心者です。 よろしくお願いいたします。 [前提]  テーブルA のIDに紐づけてクエリBの数値をクエリCで反映させたい。  〈詳細データ〉   ・テーブルA    [ID] [名称]       1   あ     2   い     3   う     4   え     5   お   ・クエリB    [ID] [数値]     2   10     3   20     5   40   ・クエリC    [ID]  [名称] [数値]     1    あ  #エラー     2    い   10     3    う    20     4    え  #エラー     5    お   40   ・”テーブルAの[ID]”の全レコードと”クエリBの[ID]”の同じ結合フィールドだけを含めてリレーションを行っている。    ・クエリCの算式: IIf(IsError([クエリB].[数値]),0,[クエリB].[数値])  [質問]    ・クエリCの『#エラー』部分を0にしたいのですが、何か良い方法はございませんでしょうか。   ・そもそも上記のロジックは無理がありますでしょうか。    アクセスはあまりいじったことがございません。ご回答いただけますと幸いです。   よろしくお願いいたします。

  • アクセステキストエクスポートについて。

    アクセスでエクスポートする際に フィールド開始位置が有効ではないとなり テキストのアウト出来ない場合 下記の DoCmd.TransferText acExportDelim, , "ファイル名クエリ", "C:\Documents and Settings\Administrator\デスクトップ" & "\" & "ファイル名.csv", True End Sub のようにして対応しているのですが 1レコード目に 余計な フィールド1,フィールド2,フィールド3,フィールド4,フィールド5のようなレコードが 付いてしまうのですが インポートしたままの状態でエクスポート出来ないでしょうか。 ちなみにファイル数が多いのを想定して あとで1レコード目を削除する方法は考えておりません。 どうぞよろしくお願いします。

  • Accessでの計算

    Access2002の質問です。 クエリに式のフィールドを追加して、そこで計算をさす場合、一つ前のレコードの値から引き算をするには、どうしたらいいのでしょう。 例えば次のような前回の入金日から今回の入金日までに要した 日数を求める場合です。 レコードの番号 フィールド フィールド フィールド(式)    ↓      ↓    ↓     ↓                    日付   入金額   経過日数    1  2002/03/01   1000     A    2  2002/03/11   2000     B    3  2002/03/15   1500     C    4  2002/03/20   3000     D A.B.C.Dを求めたいのです。    Aは当然0日です    Bはレコード番号1からレコード番号2に要した日数です(10日)    Cはレコード番号2からレコード番号3に要した日数です(4日)    Dはレコード番号3からレコード番号4に要した日数です(5日) Accessに挑戦して孤軍奮闘しています。 でも難しくわからない点が多くて挫折しかけています。 どうかお助けください。

  • Access2000 でのIIFを使用したデータ更新処理

    こんにちは。答えていただけるとありがたいです。。。 Access2000 でのIIFを使用したデータ更新処理ができなくて困っています。 クエリで、退職者(テキスト形式)フィールドに 入力フォーム(チェックボックス)で入力した値(-1、0)を、 "-1"なら"退職"、"0"なら""空と更新したいのですが、 選択クエリで中身を見てみると、すべてのレコードが"0"と入ってしまいます。 書いている式は 式1: IIf([退職者]="-1",[退職者]="退職",[退職者]="") です。 以上、よろしくおねがいします。

  • データのテキストファイル抽出

    データの抽出に困っています。 エクセルデータにてA~Lのフィールドに値が入っていて、1000レコード程のデータを ・1レコードずつ ・A列のフィールドをファイル名に ・テキストファイルに出力 ・テキストファイルには1レコードを縦に、フィールドごと改行して並べる 上記のようにして作成する必要があります。 今までは、 A B C...K L となっているデータの列と行を入れ替えて A B C . . K L としてテキストファイルを作成し、セルAのフィールドをファイル名にして、 手作業で1列ごとにコピー&ペーストして行っていました。 非常に効率が悪いので、全自動化もしくは一部自動化出来ないかと試行錯誤していますが 良い方法が見つけられません。 何か良い方法をご存知の方がおりましたら教えて下さい。

  • アクセスでデータを足すには、また、引くには?

    アクセスを使用していて、テーブルAにあるデータに、テーブルBにあるデータを足したいと思っています。 それぞれデータは”名前”のようなフィールドで、ひとつにまとめたいのですがクエリーでの表現が分かりません。SQLビューのようなやり方でも構いませんので、是非お願い致します。 また、もう一つですが、テーブルAにあるデータに、テーブルBにあるデータを引きたい思っています。こちらも”名前”のようなフィールドで、同じレコードは省きたいと思っております。 よろしくお願い致します。

専門家に質問してみよう