質問のタイトルが正しいかどうかはわからないのですが、やりたいことは以下のとおりです。
初心者ですので、考え方自体間違っているかもしれません。ご教授ください。
アクセスにORDER DETAILというテーブルがあります。ここに、追加クエリを利用して、データを追加していけるようにしたいと思います。
その追加クエリは、ORDER DETAILに追加 という名前のテーブルからできており、このテーブルに入ったものがクエリを使うことでORDER DETAILに入るようになっています。
このとき、
1、ORDER DETAILに追加、という名前のテーブルの中身のデータは、エクセルからインポートします。何度も繰り返し使います(何度も追加する)ので、インポートのたびに、まず、テーブルの中身をすべて消してから、インポートするようにします。それから追加クエリを使って、ORDER DETAILに追加を行います。
2、このとき、エクセルのデータには、商品番号しか入っておりません。これをインポートしたとき、ORDER DETAILに追加 テーブルには、たくさんのフィールドがありますので、それを埋める必要があります。そこで、VLOOKのようなものを使用したいのです。アクセス内に、商品 という名前のテーブルがありますので、ORDER DETAILに追加 テーブルのフィールドである’DESC1'に、商品 テーブルの’Description1’を入れるようにしたいのです。このときサブクエリを使うのでしょうか?SQLでしょうか?単なるテーブルのリレーションシップで解決しないと思ったので、お尋ねしました。
詳しい方がいらっしゃいましたらどうぞお願いいたします。
No.8ベストアンサー
- 回答日時:
No.2です。
> 私の書き方が悪かったな、と気づいたところがありましたので、ANo.3さんに対する
> 補足内容をご参照ください。
いえ、ami0607さんの意図は、きちんと伝わっています(恐らくMARU4812さんにも)。
「フィールドに値を入れたい」というご希望はわかった上で、「関数で値が特定できる
データは、テーブルにフィールドを用意しないのが、Access等での一般的な使用法
ですよ」とアドバイスをした、ということです。
・・・とはいえ、どうしても『ORDER DETAIL』テーブルに『DESC1』フィールドを設置
したいということでしたら、回答者からそれを強く推すのもおせっかいにしかなりません
ので(汗)、その方法をご説明します。
といっても、
> 双方の『商品番号』フィールドを結合させた選択クエリを作成するについてですが、
> これは私にでもすぐにできそうです。
とのことでしたら、そんなに難しい話ではありません。
1)デザインビューで、上記の通りの選択クエリを作成する
2)上記の選択クエリを追加クエリに変更し、追加先となるテーブルを指定
3)追加元と追加先で同名のフィールドの場合は、『レコードの追加』欄に自動で
フィールド名が入るので、確認
※同じフィールドを複数回指定していると追加実行時にエラーとなるので注意※
4)追加元と追加先で名前が異なる場合は、空白になっている『レコードの追加』欄
の右端をクリックして、そこのリストから、追加したいフィールドを指定
5)追加が必要なフィールドを全て指定したら、保存して閉じる
・・・以上です。
画像を添付しますので、併せて参考まで。
いつもありがとうございます。しかも、画像つき!(これのおかげで、理解するのに時間がかかりませんでした)
教えていただいたとおりにやったら、いとも簡単にできました!ありがとうございます。VLOOKのような式を書かないといけないと思っていたので、このようなやり方でできると知って、とても驚き&感激でした。
本当にありがとうございました。今、会社のシステムとかを昔さわっていた人がいなくなった&私が個人的に誰でも簡単に触れるシステムを作っておきたいため、いろいろ身の回りのことを便利にしているところですが、助けていただき本当に感謝しています。
またいろいろ質問することもあるかもしれませんが、どうぞ宜しくお願い致します。
No.7
- 回答日時:
#6の続きとして、
追加クエリの作成方法は以下にあります。
http://office.microsoft.com/ja-jp/access-help/HA …
追加するテーブルと追加されるテーブルで
フィールド名が違っていてもフィールドの型が
同じならば追加できます。
No.6
- 回答日時:
#4です。
できます。「ORDER DETAILに追加」テーブルの
「DESC1」も「ORDER DETAIL」に追加するとして
「ORDER DETAIL」にも同じ名前の「DESC1」という
フィールドがあるとすると、以下のように
なります。
INSERT INTO ORDER DETAIL ( [CATALOG#], DESC1 )
SELECT ORDER DETAILに追加.商品番号, ORDER DETAILに追加.DESC1
FROM ORDER DETAILに追加;
もし、「DESC1」の名前が違っていても追加する
フィールド名をクエリのデザインビューで
「レコードの追加」のところで指定すれば
指定したフィールドにデータが追加されます。
いつもありがとうございます。そのようなやり方でできるのですね。
とても参考になりました。
SQLがあまり得意でないため、今回は、別の方に教えていただいたデザイン画面を使ってやる方法で私はさせていただきました。
また今後も機会があればご教授お願いいたします。
No.5
- 回答日時:
#4です。
>#1でのクエリは一応、Excel側のセルの先頭には「商品番号」を
>いれているものとしています。
というのは、この「商品番号」がフィールド名に
なるからです。
No.4
- 回答日時:
Sheet1というのはExcelのSheetの名称で、Excelを
開いたときに下に表示されています。普通は
初期値はSheet1、Sheet2のようになっています。
リンクするとこのSheet名がAccessでのテーブル名
として登録されます。
リンク方法は以下にあります。
http://office.microsoft.com/ja-jp/access-help/HA …
テーブルのリンクを選択し、ファイルの種類を
Excelに変更し、フォルダに移動後、Excelファイルを
選択するとウィザードが表示されます。
#1でのクエリは一応、Excel側のセルの先頭には「商品番号」を
いれているものとしています。
ありがとうございます。Sheet1は、この場合、テーブルの名前(通常)ということですよね。わかりました。
今回は、”ORDER DETAILに追加” テーブルのフィールドである’DESC1'に、”商品” テーブルの’Description1’を入れるようにしたい、(商品番号でlookupを行い、値をひっぱる)
ということをしたいのですが、今になってまたひとつ面倒なことがわかりました。ふたつのテーブルで、’商品番号’は一致するのですが、フィールドの名前が違うことがわかりました。
ORDER DETAIL のテーブルのほうでは、CATALOG#というフィールド名になっております。
商品番号と、CATALOG#というように、フィールド名はちがいますが、参照して値はひっぱれるのでしょうか。
No.3
- 回答日時:
私も
> たくさんのフィールドがありますので、それを埋める必要があります。
すべきではないと思います。
VLOOK はあくまでもキーが一致する情報を参照するだけですので、
テーブルのリレーションの機能がそのものだと思います。
一般に、共通するデータはマスタ(今回の場合は商品テーブル)に
まとめて、実績データのテーブルには商品番号しか記録しません。
わざわざ処理時点のマスタの情報をコピーする必要があるのは、
出荷伝票など、その時点の確定データを履歴管理するときなどです。
VLOOK の検索機能ではなく、完全にその時点の情報を記録する
目的があるなら、そのように質問を修正する必要があるかと
思います。
VLOOK の機能という質問であれば、
> たくさんのフィールド
を削除してリレーションすべきだと思います。
この回答への補足
すみません。たぶん、私のこの文章の書き方が悪かったのだと思います。
今回の件は、追加元のテーブルにはあくまで商品番号のみが入っています。その詳細(商品の名前や価格など)をすべて記入してから追加元に追加する必要があるので、それを、なんとかアクセス内で処理できないかな、と思ったのです。
最悪、エクセルからアクセスにデータを取り込む前に、エクセル内でVLOOKを使って完全なデータにしてから取り込みすればいい話なのですが、商品名や価格などは、アクセスに入っているデータが常に最新なので、アクセス内で値を参照しひっぱってこれるようにしたいという質問です。
No.2
- 回答日時:
> VLOOKのようなものを使用したいのです。
Accessの関数で、ExcelのVLookup関数に近いことが行えるもの
としては、DLookup関数があります。
(大雑把には
VLookup(検索値, 参照範囲, 参照列(番号))
DLookup(参照列(名前), 参照テーブル, 検索条件)
といった感じ:詳しくはヘルプを参照下さい(汗))
ただ、
> たくさんのフィールドがありますので、それを埋める必要があります。
とのことですが、これで「テーブルのフィールド」を埋めてしまうと、値が
固定されてしまいます。
(Excelの動作で例えるなら、「VLookupで表示させた値をコピーした
後、『形式を選択して貼り付け』を使用して、『値』を貼り付け」した
のと同じことになってしまう、と)
Excelで関数を残したままにしておく(=参照先のデータを更新したら
自動計算で反映される)のと同じ状態にするためには、選択クエリと
してそれらのデータを表示させるようにする必要があります。
(→Accessなどの「リレーショナル データベース」と呼ばれるもので
通常採られる方法でもあります)
※ここで言っているのは、あくまで「他のテーブルを参照すれば値を
特定できるデータ」だけです。それ以外の個別の情報は、当然
ながらフィールドに記録する必要があります。
ですので、本来なら、『ORDER DETAIL』『ORDER DETAILに追加』
のどちらにも、『DESC1』フィールドは作成しない方がベターです。
(勿論、式を残したままのExcelと同様に、値を記録していない方が
動作は遅くなるため、そういう値を記録する場合もあります)
この状態で、『DESC1』の情報を表示するには、
a)『ORDER DETAIL』と『商品』の2つのテーブルから、双方の『商品
番号』フィールドを結合させた選択クエリを作成する
b)『ORDER DETAIL』テーブルのみから選択クエリを作成し、
『DESC1』に相当するフィールドは、DLookup関数を使用するか、
『商品番号』フィールドをコンボボックス表示する
(コンボボックスの『値集合ソース』プロパティに、『商品』テーブルを
使用)
といった手段を採ります。
(aの場合は、テーブルの主キーの設定などによってはクエリ上での
追加/更新などが制限される場合があります。
bの場合は、『ORDER DETAIL』テーブルへの追加/更新には
制限は発生しませんが(『商品』テーブルは参照のみ)、aに比べて
動作が遅くなります)
・・・以上、とりあえず、今回は概要ということで(汗)
この回答への補足
すみません。ひとつ、私の書き方が悪かったな、と気づいたところがありましたので、ANo.3さんに対する補足内容をご参照ください。
丁寧に説明していただきありがとうございます。
今回は、”ORDER DETAILに追加” テーブルのフィールドである’DESC1'に、”商品” テーブルの’Description1’を入れるようにしたい、(商品番号でlookupを行い、値をひっぱる)という希望ですが、価格やそのほか、 ”商品”テーブルから3フィールド分はひっぱってこようと思っているのですが、、 これは思い作業になりそうでしょうか?
また、回答の>a)『ORDER DETAIL』と『商品』の2つのテーブルから、双方の『商品番号』フィールドを結合させた選択クエリを作成する
についてですが、これは私にでもすぐにできそうです。しかしこれを作ったあと、どうしたらいいのでしょうか。教えていただけますでしょうか。
たしかにこれで、このクエリ内で商品番号からDESC1とDescription1がひっぱってこれますが、私の希望は”ORDER DETAILに追加”テーブルを商品番号のみのエクセルデータから作成したとき、このテーブルのフィールドであるDESC1に”商品”テーブルから ’商品番号’をもとにDescription1の値をひっぱることです。そして、”ORDER DETAILに追加”テーブルに常に値が表示されるようにすることです。
以上、どうぞ宜しくお願いいたします。
No.1
- 回答日時:
一応、Excelのシートをリンクして使う
ものとして、以下のようなことでしょうか。
追加クエリです。
INSERT INTO ORDER DETAILに追加 ( 商品番号, DESC1 )
SELECT Sheet1.商品番号, 商品.Description1
FROM Sheet1 INNER JOIN 商品 ON Sheet1.商品番号 = 商品.商品番号;
この回答への補足
リンクってできたんですね。便利ですね。ありがとうございます。エクセルを更新したら、アクセスのテーブルもそれにつられるってことですよね。
ではリンクテーブルを作って、その名前を ORDER DETAILに追加 にすることにします。
このSheet1は何と理解したらよろしいでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- PostgreSQL SQLで検索結果の記事を表示したい 1 2022/04/28 21:03
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- その他(Microsoft Office) エクセルでテーブルの最終行が自動追加されない 1 2023/01/04 15:09
- Access(アクセス) access フォーム 大分類、小分類 1 2022/08/11 18:03
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessのフィールド名に半角括...
-
クリスタルレポートで0件時の表示
-
日付と文字列を条件としてDLook...
-
ADOX フィールドのRequiredプ...
-
ACCESSのフィールドデータの照...
-
アクセスでADO 並べ替えが適用...
-
Access 2010で実行時エラー3061
-
AccessのDAOでフィールド名を配...
-
accessでフィールド追加のあと...
-
Access VBA 添付型フィールド
-
アクセス ADO Null以外のレコ...
-
2つ目のレコードの値を取得す...
-
c言語で自分のホームディレク...
-
ADOでNullフィールドの抽出
-
テーブルのデータ型の変更がで...
-
NULLを含む文字列の結合で...
-
INT64対応のprintf系関数はあり...
-
テキストファイルのフィールド...
-
delphi5について。
-
クリスタルレポートで文字列の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessのフィールド名に半角括...
-
INT64対応のprintf系関数はあり...
-
accessでフィールド追加のあと...
-
DataTableに特定のフィールドが...
-
2つ目のレコードの値を取得す...
-
Access 2010で実行時エラー3061
-
日付と文字列を条件としてDLook...
-
クリスタルレポートで文字列の...
-
クリスタルレポート(8.5)の書式...
-
アクセスでADO 並べ替えが適用...
-
AccessのDAOでフィールド名を配...
-
テーブルのデータ型の変更がで...
-
NULLを含む文字列の結合で...
-
AccessVBAで他テーブルのデータ...
-
Access VBA 添付型フィールド
-
2次元のdictionary
-
ADOでNullフィールドの抽出
-
クリスタルレポートの式フィー...
-
ACCESSで視覚的タイムテーブル...
-
ACCESSデータベースにV...
おすすめ情報