Microsoft Access 掲示板

インポートについて

4 コメント
views
4 フォロー

Accessでは受注テーブルと
明細テーブルがあり、1対多で入力しています
Excelからインポートするときに、Excelで
正規化されていません

内容は一般的な売上です
Excelを明細につっこむと受注テーブルと結びつきませんし
前もってExcelにIDを付与するものもずかしいです

やまだ
作成: 2023/11/01 (水) 06:20:24
通報 ...
1
すずやん 2023/11/01 (水) 08:04:40

ちょっとなにを解決したいのかが明確でないのでただの予想ですが、「正規化されていないエクセルの内容をAccessにインポートして受注テーブルと結びつけて保存したい」ということでしょうか。

とりあえず全てのエクセルのデータを読み出して、テーブルに収めてはどうでしょうか。
その後、テーブルデータを一つづつ読み込みながら条件判断し、条件によって「ID」とやらを付加し、受注テーブルと結びつける、という感じ、かもしれません。

なにを持って条件判断するかは制作者歯しだいですね。

2

データベースでは正規化されたデータでないと扱いにくいので、正規化されていないデータの場合は、正規化してから利用するというのが原則です。
Excel側で正規化するのが難しいのなら、いったんAccessにそのままインポートして、それをSQLやVBAを駆使して正規化することになります。

具体的に方法は、現状のAccessのテーブル構成と、エクセルのデータ例などを提示してもらえれば、アドバイスがあると思います。

3
やまだ 2023/11/01 (水) 16:51:29 de0b5@03826

回答有り難うございます

具体的に書きますと、
ACCESSでは受注(伝票)テーブルとその明細が別テーブルになっていて1対多の構造で入力されています
ACCESSで直接入力する分には問題ないのですが
Excelのデータをインポートする必要があります
Excelでは、伝票の概念がなく、ACCESSの明細にあたる部分のみが入力されています
インポートするときに、日付と取引先でまとめて1伝票とし、伝票テーブルに伝票を作成し、1対多の関係にしたいです

4
すずやん 2023/11/01 (水) 17:16:23

とりあえずエクセルをインポートするVBAを組んではいかがでしょうか。

流れ的には以下の感じかと思います。概略です。

1.取り込みボタンなどでVBAを呼び出す。
2.エクセルをインポートするVBA(ループ形式)で、取り込み対象のExcelの1行を読む。ループ中では各項目を別の変数に一旦保存
3.保存した変数から、キーとなる項目を判別、結果から受注データを登録(または既存の受注データと紐つけるかも判別)
4.登録した受注データのキーIDと一緒に変数の内容を明細テーブルに書き込む
5.ループで全行をまわす

ACCESSで直接入力できているなら、キーの割り振りのルールは決まっていると思いますので、それをインポートのループを使ってVBA内でやるイメージかと思います。