

エクセルで作った表を、データが1万件近くなって重くなってきたので
アクセスに移行しようと考えています。
エクセルのフォーマットのままではアクセスでは扱いにくいので正規化したいのですが、
データ量が多いのでvbaでできたらなと思います。
【Excel】
商品|原料1│原料2│原料3・・・
ああ│_×_│___│_×_
いい│_×_│_×_│___
【Access】
商品マスターと原料マスターを作っておいて
商品ID|原料ID|×
_1_|_1_|×
_1_|_2_|
_1_|_3_|×
_2_|_1_|×
_2_|_2_|×
_2_|_3_|
というようにしたいです。
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
Excelのシートの先頭行は、質問のように
商品|原料1│原料2│原料3・・・
となっているものとします。先頭行が
ああ│_×_│___│_×_
からいきなり始まっている場合はコードを
変更する必要があるのでその場合は補足
してください。
手順を以下に説明します。
(1)テーブルの用意
使用原料:
商品 テキスト型
原料 テキスト型
使用 テキスト型
使用原料一覧:
商品ID 数値型
原料ID 数値型
使用 テキスト型
(2)ExcelのSheetのリンク設定
シートをテーブルとしてリンクします。
以下に方法を記述しています。
http://oshiete1.watch.impress.co.jp/qa6524626.html
途中の設定で、「先頭行をフィールド名として使う」
にチェックをいれます。
(3)標準モジュールに以下を貼り付ける。
DAOを使っているので、コード表のツールから
参照設定を選択して、
Microsoft DAO xx Object Library
にチェックを入れて、OKとします。xxは3.6のような数字です。
このとき、
Microsoft ActiveX Data Objects xx Library
にチェックが入っていたらはずしてください。
なお、Sheet1はリンクしたExcelのシート名ですが、
シート名が設定してある場合は変更してください。
Sub test()
Dim db As Database
Dim rs1 As Recordset
Dim rs2 As Recordset
Dim fld As Field
Dim i As Long
Set db = CurrentDb
Set rs1 = db.OpenRecordset("Sheet1")
Set rs2 = db.OpenRecordset("使用原料", dbOpenDynaset)
If rs1.RecordCount > 0 Then
rs1.MoveFirst
Do Until rs1.EOF
For i = 1 To rs1.Fields.Count - 1
rs2.AddNew
rs2!商品 = rs1!商品
rs2!原料 = rs1.Fields(i).Name
rs2!使用 = rs1.Fields(i).Value
rs2.Update
Next i
rs1.MoveNext
Loop
End If
rs1.Close: Set rs1 = Nothing
rs2.Close: Set rs2 = Nothing
db.Close: Set db = Nothing
End Sub
(4)クエリの設定
以下のSQL文をあたらしいクエリの
SQLビューに貼り付け保存してください。
名前は、「Q変換」としておきます。
INSERT INTO 使用原料一覧 ( 商品ID, 原料ID, 使用 )
SELECT 商品マスタ.商品ID, 原料マスタ.原料ID, 使用原料.使用
FROM (使用原料 INNER JOIN 商品マスタ ON 使用原料.商品 = 商品マスタ.商品) INNER JOIN 原料マスタ ON 使用原料.原料 = 原料マスタ.原料;
(5)実行手順
新しいフォームにボタンを二つ設定します。
ボタンのクリック以下を設定します。
Private Sub コマンド0_Click()
Call test
End Sub
Private Sub コマンド1_Click()
DoCmd.OpenQuery ("Q変換")
End Sub
実行はコマンド0、コマンド1の順で行ないます。
コマンド0を実行し、テーブルを確認し、コマンド1
を実行しテーブルを確認してみてください。
以上です。わからないところがあれば補足してください。
No.2
- 回答日時:
商品マスタ、原料マスタを作り、商品別原料詳細の
ようなものに、Excelのデータを移植したい、という
ことですか。
たとえば、
商品ID|原料ID|使用
_1_|_1_|×
_1_|_2_|
_1_|_3_|×
_2_|_1_|×
_2_|_2_|×
_2_|_3_|
あるいは、
商品ID|原料ID|使用量
_1_|_1_|10
_1_|_2_|
_1_|_3_|20
_2_|_1_|50
_2_|_2_|30
_2_|_3_|
のようなテーブルを作成したい、
あるいは、フォームやクエリで
表示したい、ということですか。
この回答への補足
説明がわかりにくく、すみません。
商品ID|原料ID|使用
_1_|_1_|×
_1_|_2_|
_1_|_3_|×
_2_|_1_|×
_2_|_2_|×
_2_|_3_|
はい、まさにこういうテーブルが作りたいです。
No.1
- 回答日時:
もう少し質問内容を丁寧に説明のこと。
自分のようには他人にはわからない。
ーー
商品マスター・・・商品ID、商品名+あと項目は何?
原料マスタ・・・ ID、原料名+あと項目何?
商品と使用原料のリストはつくる?
両ペアーの対で持つ?
その方が融通性はあるが、どういう使い方をするかで、固定的かどうかで、ベターかどうか決る。これは
他人には判らない。
ーー
VBAでやるなら、こんなところへ聞いても妙案は無い。アイデアを出すだけ。
適当なソート列でソートして、重複を省いてマスタといったファイルを作れば良い。アイデアよりも力仕事。
ーー
質問のAccess側のXはなに?
使うというサイン?
Xでやるより
_1_|_1_
_1_|_3_
_2_|_1_
_2_|_2_
の方が良くは無いのか?
これなら、エクセルから商品と原料ペアーを右端列まで、および最終行まで書き出せば仕舞いでは?。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- 消費税 消費税の納税額の計算 1 2023/02/19 18:12
- その他(データベース) accessでの請求管理について 2 2022/06/13 21:51
- Excel(エクセル) エクセルでのVBA 2 2022/08/03 06:48
- スーパー・コンビニ 商品の原料をチェックしたり商品の説明書きを読みたい。商品を選ぶ時に原料をチェックしたり、パッケージに 2 2022/11/05 13:51
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- Excel(エクセル) マクロVBAのフォルダ階層別で検索の方法 4 2022/04/03 23:23
- その他(データベース) Microsoft Accessについて 1 2022/06/06 16:20
- 薬学 【医学、薬学】常盤薬品工業のプラズマ乳酸菌 おいしい青汁の原材料について質問します。 1 2023/01/19 18:14
- 経営情報システム accessでの請求管理について 12 2022/06/11 16:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXISTSを使ったDELETE文
-
ACCESS ツリービューの作り方
-
Access2003 vbaでの正規化
-
SQL文で、合計が0のレコードを...
-
各部署、各チーム、個人ごとの...
-
テーブルの正規化について
-
前月の取得について
-
日付により変動する「単価」を...
-
Accessの実行時エラーについて
-
ACCESS 商品毎の最新の単価を設...
-
レコード更新時にデータ値を自...
-
Excel VBA ADODB
-
フィルターかけた後、重複を除...
-
外部参照してるキーを主キーに...
-
差し込み後、元データを変更し...
-
エクセルで最後の文字だけ置き...
-
SQLで特定の項目の重複のみを排...
-
SELECT 文 GROUP での1件目を...
-
INSERT文でフィールドの1つだ...
-
SQLServerで文字列の末尾からあ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXISTSを使ったDELETE文
-
SQL文で、合計が0のレコードを...
-
Accessの実行時エラーについて
-
ACCESS ツリービューの作り方
-
ACCESS 商品毎の最新の単価を設...
-
日付により変動する「単価」を...
-
アクセス フィールド名に変数...
-
ACCESSでDLookUpすると、不正な...
-
Excel VBA ADODB
-
ACCESSでクエリ作成時複数のフ...
-
異なるデータベース間のテーブ...
-
ACCESSのマスタの変更について
-
Access2013で商品に複数の単価...
-
前月の取得について
-
日付の範囲検索で
-
アクセス★非課税、課税の合計金...
-
SQL2005 クエリ文について
-
AS400にてサブファイルレコード...
-
自己結合について
-
ビューの更新タイミング
おすすめ情報