ACCESSで悩んでいます。ご回答頂けると幸いです。

<やりたいこと>
他のテーブルを参照して、一括でフィールドを変換する更新クエリを作りたい。

<元テーブル1 : データ >
コード│内容1│内容2
001│あああ│AAA
002│あああ│BBB
003│いいい│AAA
004│いいい│BBB

<元テーブル2 : 内容2マスタ>
内容1│AAA│BBB
あああ│アアア│亜亜亜
いいい│イイイ│伊伊伊

<作りたいテーブル>
コード│内容1│内容2
001│あああ│アアア
002│あああ│亜亜亜
003│いいい│イイイ
004│いいい│伊伊伊

内容1が「あああ」で内容2が「AAA」の場合、
マスタテーブルを見てクロスするところの「アアア」に、
内容2を変更したい、という感じです。
ひらがなをカタカナにしたい、ということではありません。
実際のデータは、テーブル1は文字列型、
テーブル2は日付型になる予定です。

当方初心者のため、できればクエリのデザイン画面で
できるとうれしいですが、難しければSQLも頑張ります。
ご回答、よろしくお願い致します。

このQ&Aに関連する最新のQ&A

あああ」に関するQ&A: あああ嫌だ女の性格

A 回答 (1件)

提示された分だけしか検証してませんが



SELECT コード, 内容1,
DLookup(DLookup("内容2","データ","コード='" & [コード] & "' AND 内容1='" & [内容1] & "'"),"内容2マスタ","内容1='" & [内容1] & "'") AS 内容2
FROM データ
ORDER BY コード;

直にテーブルを作成するのなら、FROM の前に INTO 作りたいテーブル名 を入れてみてください。

この回答への補足

ご回答が遅くなって申し訳ありません。
丸写しはよくないと思うので、SQLを理解すべく頑張っているのですが、なかなか難しくて。もう少し頑張ってみます。お時間ください。

補足日時:2009/05/29 21:35
    • good
    • 0
この回答へのお礼

デザイン画面の式ビルドでDlookUP関数を使って解決しました!
ありがとうございましした。

お礼日時:2009/06/14 13:05

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccessでvlookupみたいなことはできますか。

Accessで、2つのテーブルがあります。

touroku_m テーブル……ID、登録No、氏名、携帯メール
keitai_m テーブル……ID、登録No、携帯メール

keitai_mの方には、携帯メールフィールドに、アドレスが入力されています。
touroku_mテーブルの携帯メールフィールドは空なので、登録Noを比較して、共通だったらkeitai_mに入力してある携帯メールアドレスをtouroku_mに一気に入れたいのです。

こんなことは可能でしょうか。

Aベストアンサー

レス遅くなってすみません。
えっと、追加クエリはテーブル名を見て追加しますので、追加クエリが実行されるときにtouroku_mの名前のテーブルに追加されます。
なので最初touroku_mという名前のテーブルが名前を変えると、それには追加されませんが、またtouroku_mに戻せば追加されるようになりますよ。
要は追加クエリを実行したいテーブルの名前をtouroku_mにしとけば大丈夫です。

Qアクセスのクエリに、VLOOKを設定したい。

質問のタイトルが正しいかどうかはわからないのですが、やりたいことは以下のとおりです。
初心者ですので、考え方自体間違っているかもしれません。ご教授ください。

アクセスにORDER DETAILというテーブルがあります。ここに、追加クエリを利用して、データを追加していけるようにしたいと思います。
その追加クエリは、ORDER DETAILに追加 という名前のテーブルからできており、このテーブルに入ったものがクエリを使うことでORDER DETAILに入るようになっています。

このとき、
1、ORDER DETAILに追加、という名前のテーブルの中身のデータは、エクセルからインポートします。何度も繰り返し使います(何度も追加する)ので、インポートのたびに、まず、テーブルの中身をすべて消してから、インポートするようにします。それから追加クエリを使って、ORDER DETAILに追加を行います。
2、このとき、エクセルのデータには、商品番号しか入っておりません。これをインポートしたとき、ORDER DETAILに追加 テーブルには、たくさんのフィールドがありますので、それを埋める必要があります。そこで、VLOOKのようなものを使用したいのです。アクセス内に、商品 という名前のテーブルがありますので、ORDER DETAILに追加 テーブルのフィールドである’DESC1'に、商品 テーブルの’Description1’を入れるようにしたいのです。このときサブクエリを使うのでしょうか?SQLでしょうか?単なるテーブルのリレーションシップで解決しないと思ったので、お尋ねしました。
詳しい方がいらっしゃいましたらどうぞお願いいたします。

質問のタイトルが正しいかどうかはわからないのですが、やりたいことは以下のとおりです。
初心者ですので、考え方自体間違っているかもしれません。ご教授ください。

アクセスにORDER DETAILというテーブルがあります。ここに、追加クエリを利用して、データを追加していけるようにしたいと思います。
その追加クエリは、ORDER DETAILに追加 という名前のテーブルからできており、このテーブルに入ったものがクエリを使うことでORDER DETAILに入るようになっています。

このとき、
1、ORDER DETAILに追加...続きを読む

Aベストアンサー

No.2です。

> 私の書き方が悪かったな、と気づいたところがありましたので、ANo.3さんに対する
> 補足内容をご参照ください。

いえ、ami0607さんの意図は、きちんと伝わっています(恐らくMARU4812さんにも)。
「フィールドに値を入れたい」というご希望はわかった上で、「関数で値が特定できる
データは、テーブルにフィールドを用意しないのが、Access等での一般的な使用法
ですよ」とアドバイスをした、ということです。

・・・とはいえ、どうしても『ORDER DETAIL』テーブルに『DESC1』フィールドを設置
したいということでしたら、回答者からそれを強く推すのもおせっかいにしかなりません
ので(汗)、その方法をご説明します。

といっても、
> 双方の『商品番号』フィールドを結合させた選択クエリを作成するについてですが、
> これは私にでもすぐにできそうです。
とのことでしたら、そんなに難しい話ではありません。

1)デザインビューで、上記の通りの選択クエリを作成する
2)上記の選択クエリを追加クエリに変更し、追加先となるテーブルを指定
3)追加元と追加先で同名のフィールドの場合は、『レコードの追加』欄に自動で
 フィールド名が入るので、確認
 ※同じフィールドを複数回指定していると追加実行時にエラーとなるので注意※
4)追加元と追加先で名前が異なる場合は、空白になっている『レコードの追加』欄
 の右端をクリックして、そこのリストから、追加したいフィールドを指定
5)追加が必要なフィールドを全て指定したら、保存して閉じる


・・・以上です。
画像を添付しますので、併せて参考まで。

No.2です。

> 私の書き方が悪かったな、と気づいたところがありましたので、ANo.3さんに対する
> 補足内容をご参照ください。

いえ、ami0607さんの意図は、きちんと伝わっています(恐らくMARU4812さんにも)。
「フィールドに値を入れたい」というご希望はわかった上で、「関数で値が特定できる
データは、テーブルにフィールドを用意しないのが、Access等での一般的な使用法
ですよ」とアドバイスをした、ということです。

・・・とはいえ、どうしても『ORDER DETAIL』テーブルに『DESC1』フィールドを設置
し...続きを読む

QACCESS 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」と表記されてしまいます。

 何卒よろしくお願いいたします。

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む

QExcelのVlookupでアクセスを参照したい

質問があります。

掲題の通りですが、ExcelのVlookupでACCESSのクエリを参照してレコードを取得したいです。

今まで、ACCESSのクエリをExcelにエクスポートして、それをExcelでVlookupで持ってきていました。それを、Accessから直接Vlookupでもってきたいです。

ADO+VBAでやるだろうとは理解していますが、どうも難しくわからないです・・・。コードの記述を含めてやり方を教授して頂けると幸いです。
画像をアップロードしたのでよろしくお願いいたします。
画像のA1-D5がExcelで、下のテーブルはACCESSのものです。

ACCESSのテーブルをExcelのシートにコピペしてVlookupすれば良いのですが、後学のため、それと応用を利かすためにAccessのクエリを直接参照してデータを取得する方法を知りたいです。

よろしくお願いいたします。

それと、もし、その他オフィスの項目で聞くべきでしたら教えて頂ければ幸いです。

よろしくお願いいたします。

Aベストアンサー

ADO+VBAで正解です

エクセルのファイルとアクセスのファイルが同じ場所にあるという前提で

'先ずは宣言を行います
Dim ws As Workspace
Dim db As DAO.Database
Dim rs, As DAO.Recordset
Dim strSQL As String

'保存場所の設定
dbNAME = "アクセスファイル名.mdb"
mydb = ActiveWorkbook.Path & "\" & dbNAME

'ワークスペースとデータベースの設定
Set ws = DBEngine.Workspaces(0)
Set db = OpenDatabase(mydb)

'エクセル上で実行するクエリ文の作成と実行
strSQL = "select * from テーブル名 Where 商品名 = " & "りんご" & ";"
Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)

'セルに出力
range("D2") = rs!出荷数


で実現出来るかと思います。

データベースはアクセス、作業はエクセルでと割り切ると良いかと思います。
実際のテーブルはもっと縦も横も多いと思いますので、SQL文を

strSQL = "select * from テーブル名 Where 商品名 = " & "りんご" & "and 品種 = " & "陸奥" & ";"

と変えれば追加できます。

上記 "りんご" 部分を cells(2, 1) と参照する形でも対応できますし、
for next Do loop 文で cells(i, 1) と変数を入れれば動的な処理もできます。

それでは~

ADO+VBAで正解です

エクセルのファイルとアクセスのファイルが同じ場所にあるという前提で

'先ずは宣言を行います
Dim ws As Workspace
Dim db As DAO.Database
Dim rs, As DAO.Recordset
Dim strSQL As String

'保存場所の設定
dbNAME = "アクセスファイル名.mdb"
mydb = ActiveWorkbook.Path & "\" & dbNAME

'ワークスペースとデータベースの設定
Set ws = DBEngine.Workspaces(0)
Set db = OpenDatabase(mydb)

'エクセル上で実行するクエリ文の作成と実行
strSQL = "select * from テーブル名 Where 商品...続きを読む

QAccess 別テーブルにある値を抽出条件にしたい

OS:WindowsXP SP3
使用ソフト: Microsoft Access2003


選択クエリにて、別テーブルのフィールドにある値すべてを抽出条件にできますか?


ホームページに来て頂いた方の検索キーワードを集計しております。
テーブル1には『検索キーワード履歴』フィールドがあり、お客様が使用した検索キーワードが入力されています。(約2万件)
テーブル2には『除外キーワード候補』フィールドがあり、不要なキーワードが入力されています。(約10件)


クエリにて、『検索キーワード履歴』から『除外キーワード候補』の値を全て除いた結果を出力させたいのですが、
抽出条件をどのように指定したらいいのか分かりません。

そもそも、別テーブルのフィールドにある値すべてを除外させる抽出条件って指定できるのでしょうか。
SQLを用いる方法でも構いませんので教えてください。

Aベストアンサー

SELECT * FROM テーブル1
WHERE NOT EXISTS
(SELECT * FROM テーブル2 WHERE テーブル1.検索キーワード履歴 = テーブル2.除外キーワード候補)
OR 検索キーワード履歴 IS NOT NULL
とか
SELECT * FROM テーブル1
WHERE 検索キーワード履歴 NOT IN (SELECT 除外キーワード候補 FROM テーブル2 )
ということ?
1フィールドに1キーワードの場合です。

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

Qアクセスで#エラーを表示させない方法は?

アクセス2000を使用しています。フォームにテキストボックスを貼り付けて、計算式を入れています。計算できない数値になると、#エラーと表示されます。目障りなので、#エラー という表示を消したいのですが、どうしたらよろしいでしょうか?宜しくお願い申し上げ候。

Aベストアンサー

はじめは「IIF関数とIsError関数を使用して」と考えたものの、IIF関数は引数がエラーになった時点で
エラーが返されてしまう(=元の木阿弥)ので、どうしたものかと思ったのですが・・・
とりあえず、「見た感じ、何も表示されていないように見える」ということで、『条件付書式』での対応と
いうのはいかがでしょうか。

1)当該フォームをデザインビューで開く
2)当該テキストボックスを選択
3)メニューで「書式(O)→条件付き書式(D)」を選択
4)『条件付き書式設定』ダイアログが開くので、『条件1(1)』枠の左端にあるコンボボックスで「式」を選択
5)上記コンボボックスの隣が1つのテキストボックスになるので、そこに以下のような式を入力
 IsError([テキスト0])
 ※上記の式は当該テキストボックスの名前が「テキスト0」の場合です。
6)上記テキストボックスの下、右から2番目に「A」と表示された、文字色を指定するボタンがあるので、
 その左の小さな「▼」をクリックし、当該テキストボックスの背景と同じ色(既定では白のはず)を選択
7)『OK』ボタンをクリックしてダイアログを閉じる

・・・以上です。
これで、『テキスト0』の計算式がエラーになった場合は、文字色が背景と同じ色になるので、「#エラー」と
いう表示はされていないように見える、という状態にすることができると思います。

はじめは「IIF関数とIsError関数を使用して」と考えたものの、IIF関数は引数がエラーになった時点で
エラーが返されてしまう(=元の木阿弥)ので、どうしたものかと思ったのですが・・・
とりあえず、「見た感じ、何も表示されていないように見える」ということで、『条件付書式』での対応と
いうのはいかがでしょうか。

1)当該フォームをデザインビューで開く
2)当該テキストボックスを選択
3)メニューで「書式(O)→条件付き書式(D)」を選択
4)『条件付き書式設定』ダイアログが開くので、『条件1(1)』枠の...続きを読む

QAccess 同じデータをたくさんのレコード(同一列)に一度に入力するには

いつもお世話になっています。
Accessの基本的な入力に関して教えてください。
同じデータをたくさんのレコード(同一フィールド)に一度に入力するには、どうすればよいか教えてください。

Excelの列方向へのコピーと同じような感覚でできないのでしょうか?

よろしくお願いします。

Aベストアンサー

質問の回答にならないかも知れませんが・・・

1.EXCELでコピーするための元データを作成します
  ※仮にレコードが1000件ある場合はEXCELで1000行作ります。

2.Excelのデータをコピーします。

3.Accessのテーブルを開きます。

4.先頭レコードの貼り付けをしたい項目にカーソルを合わせます。(カーソルは白の十字)

5.下方向へドラッグし、項目を選択します。

6.貼り付けをします。

※貼り付けに失敗した場合、元に戻せませんので必ず元ファイルのコピーを取ってから行ってください

よろしければ、お試し下さい

Qテーブルに表示されているものがクエリに表示されない

Windows NTでAccess2000を使っています。(ACCESSは初心者です)
あるテーブルに入っている伝票番号をクエリでひっぱってみたのですが
テーブルにはある番号ががクエリでは出てこないものがあります。
昇順に並び替えているぐらいで特に抽出条件を設けているわけでもないのに
何がおかしいのでしょうか??
教えてください。よろしくお願いします。

Aベストアンサー

ふたたび。

伝票番号のテーブルをAとして、Aを基準にテーブルB/テーブルCがそれぞれ何らかの形でリンクされているとします。
まず、その状態で伝票を「探す処理」を追っかけて見ます。

0.入力により、伝票番号を指定

1.Aの伝票番号=入力された番号
2.A-Bのリンクされているテーブル同士で、等しいもの
3.A-Cのリンクされているテーブル同士で、等しいもの

という処理が行われています。
2・3の処理が行われるのは、リンクが行われている為です。
2・3どちらか、片方でも成立しない場合、表示対象外になります。

【対応】
一時的に「リンク」をなくすことで、2・3の処理を回避できます。

QACCESS 重複データを1つだけ表示したい(初心者です)

ACCESSで複数のフィールドに全く同じレコードが複数存在します
(例)
フィールド1  フィールド2  フィールド3
愛知      田中      12
愛知      田中      12
愛知      田中      12
三重      山本      23
三重      山本      23
岐阜      鈴木      33
岐阜      鈴木      33

もともと他のデーターベースからCSVで落としたものをインポートしているので、データの存在自体はどうしようもありませんが、これらの重複しているデータを1件だけ表示したいのです。つまり
(例)
フィールド1  フィールド2  フィールド3
愛知      田中      12
三重      山本      23
岐阜      鈴木      33

どのようにすればよいでしょうか。

Aベストアンサー

クエリにて[固有のレコード]プロパティーを[はい]にします


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報