こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

データを効率よく入力させるには?

ACCESSにおいて製品の数量を入力するのに、製品を効率よく選択し数量を入力したいと思っています。現在は製品コードを設定し、それを入力したり、ドロップダウンリストから選択できるようにしていますが、効率があまりよくありません。
製品データの形式は、
OEM AAA 1111
OEM AAA 1112
OEM AAB 1111
CDK AAA 1111
というように、タイプ・記号・番号で構成され、データ数は約2000程度です。
何かいい知恵がありましたら、よろしくお願いします。

投稿日時 - 2007-03-11 03:41:55

QNo.2822135

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(6)

#5で書き忘れてました。最初に

1.製品数量テーブル(仮称)の作成
フィールドはとりあえず三つ

製品数量ID(オートナンバー)
製品ID、数量(数値)

投稿日時 - 2007-03-14 09:19:46

#2です。プロトタイプで試験していましたが、フォーム作りとVBAは久々の作業で手間取りました。ついでに昔からVBAは嫌いでしたがますます嫌いになりました。それはさておき

1.フォームを作りレコードソースを
SELECT 製品数量テーブル.数量, 製品数量テーブル.製品ID, 製品テーブル.製品名, 製品テーブル.コード
FROM 製品テーブル INNER JOIN 製品数量テーブル ON 製品テーブル.製品ID = 製品数量テーブル.製品ID;

2.フィールドリストからマウスで
数量、製品名、コード をフォーム上に配置する

3.コンボ1、コンボ2、コンボ3 をフォーム上に配置する

4.コンボ1 の 値/データ集合ソースを
SELECT 製品テーブル.タイプ
FROM 製品テーブル
GROUP BY 製品テーブル.タイプ
ORDER BY 製品テーブル.タイプ;

5.コンボ2 の 値/データ集合ソースを
SELECT 製品テーブル.記号, 製品テーブル.タイプ
FROM 製品テーブル
GROUP BY 製品テーブル.記号, 製品テーブル.タイプ
HAVING (((製品テーブル.タイプ)=[Forms]![フォーム1]![コンボ1]));

6.コンボ3 の 値/データ集合ソースを
SELECT 製品テーブル.番号, 製品テーブル.タイプ, 製品テーブル.記号
FROM 製品テーブル
WHERE (((製品テーブル.タイプ)=[Forms]![フォーム1]![コンボ1]) AND ((製品テーブル.記号)=[Forms]![フォーム1]![コンボ2]));

7.コンボ1 のイベント/更新後処理をコードビルダで
DoCmd.Requery "コンボ2"

8.コンボ2 のイベント/更新後処理をコードビルダで
DoCmd.Requery "コンボ3"

9.コンボ3 のイベント/更新後処理をコードビルダで
Dim key As String
Dim rsSt As Recordset, rst As Recordset
Dim strSQL As String

key = [Forms]![フォーム1]![コンボ1] + " " + [Forms]![フォーム1]![コンボ2] + " " + [Forms]![フォーム1]![コンボ3]
Set dbs = CurrentDb
strSQL = "SELECT 製品テーブル.製品ID, 製品テーブル.コード " & _
"FROM 製品テーブル WHERE (((製品テーブル.コード)='" & key & "'));"
Debug.Print strSQL
Set rsSt = dbs.OpenRecordset(strSQL)
Forms![フォーム1]![製品ID] = rsSt![製品ID]

以上です。留意点
A.製品テーブルは正規化した方が良いでしょう。ツール/解析/テーブルの正規化など見てください

B.VBAのツール/参照設定で
Microsoft DAO 3.6 Object Library
にチェックを着けてください。いまならばDAOよりADOが良さそうですが、旧い自作コードを参考にしたためこんなことになりました(^^;

投稿日時 - 2007-03-14 07:08:40

ANo.4

効率よく入力したいなら、するべきことは現状の把握です。

このようなケースの場合は
タイプは何種類あるのか?
それぞれのタイプに記号は何種類あるのか?
それぞれの記号に番号は何種類あるのか?
入力者は一日何件入力するのか?
どのように入力作業を行っているのか?(入力者は製品番号をどの程度覚えているのか?、製品名から検索する必要があるのか?など)
これらの状況を把握すれば効率よい入力方式を考えることができます。
例えば、タイプや記号などが数種類以下ならば、ラジオボタンなどで選択するほうが早いですが、その数が20を超えると他の方式を選んだほうがよくなってきます。また、番号を覚えているケースが多いなら直接入力する場所を作ったほうがよいですが、製品名を毎回検索するならそのような場所は要らないかもしれません。


製品マスタを作るにあたって他に重要なこととして
世代管理を行う必要があるのか?(価格更新、取り扱い停止などの管理)
というのもあります。

私個人的には、効率よく入力をする際には、キーボードから手を離すことなく入力できるように考えます。
具体的には、検索文字を入れるテキストボックスと、リストボックスなどを組み合わせてエクセルのオートコンプリートみたいな機能をつけるのがよいと思いますが、ちょっとプログラミングが必要になります。
入力件数が一日数十件ならそこまでしなくてもよいかもしれません。

投稿日時 - 2007-03-12 13:34:37

#2です
1.製品コードをタイプ、記号、番号の3フィールドに分解
更新クエリーを使用します。

a.製品テーブル(仮称)に
タイプ、記号、番号
の3フィールドを文字型で追加する

b.クエリ/新規作成/デザイン でデザインモードにし、ツールボタン左端のビュー選択ボタンドロップダウンリストから「SQL」を選択する。

c.SQL文に下記を貼り付ける
UPDATE 製品テーブル SET 製品テーブル.タイプ = Left([コード],3), 製品テーブル.記号 = Mid([コード],5,3), 製品テーブル.番号 = Right([コード],4);

※「製品テーブル」テーブルの「コード」フィールドを分解すると仮定しています。適当にチューニングしてください

2.この3フィールドを主キーとして重複を防止

a.分解後の「製品テーブル」をデザインモードで開きます

b.セレクタボタン(フィールド名左側の灰色四角ボタン)でタイプ、記号、番号の三フィールドを選択

c.ツールバーの主キーボタン(鍵のマーク)を押して、上記三フィールドを主キーにする。

投稿日時 - 2007-03-12 05:54:00

補足

fuuten_no_nekoさん,ご丁寧な説明ありがとうございます。
説明いただきましたとおり、フィールドを3つに分けることができ、
その3つのフィールドに対して、主キーを設定することもできました。
その先ですが、数量入力用のテーブルも必要になると思うのですが、
受付番号(主キー)・タイプ・記号・番号・数量というような構成で
「製品テーブル」のタイプ・記号・番号それぞれに対応する
リレーションシップを設定すればよいのでしょうか?
よろしくお願いします。

投稿日時 - 2007-03-12 14:20:40

コンボボックスを使用し、タイプ、記号、番号で絞り込んでゆくのが一般的でしょう。ポイントとしては
1.製品コードをタイプ、記号、番号の3フィールドに分解
2.この3フィールドを主キーとして重複を防止
3.選択フォームで3フィールドごとにコンボボックスを作成
4.タイプ更新後のイベントに記号コンボボックスの再クエリーをおこなう
5.記号更新後も同様
などでしょうか

投稿日時 - 2007-03-11 08:20:35

補足

fuuten_no_nekoさん御回答ありがとうございます。
質問の内容のとおり、私は初心者です。
”1.製品コードをタイプ、記号、番号の3フィールドに分解”
”2.この3フィールドを主キーとして重複を防止”
とは具体的にどうすればいいのでしょうか?
申し訳ありませんが、よろしくお願いします。

投稿日時 - 2007-03-11 22:44:01

ANo.1

自信ないですが回答します。

入力は、エクセルで行い、アクセスはそれを参照する。

タイプ,記号,番号の入力を分け、プルダウンで選択させれば、データ数はもっと減りそう。
オートコレクト機能でしたか...働けば手入力でもいけそう。
製品コードは、文字結合すれば作れる。
番号は手入力になりそうですが...。

投稿日時 - 2007-03-11 04:07:47

お礼

早速の御回答ありがとうございます。

投稿日時 - 2007-03-11 22:49:52

あなたにオススメの質問