• 締切済み

アクセスでtableを構成する良い方法教えてください

何度かアクセスで質問をしているものです。 最初に戻って作り直そうかと。。。。 装置番号  メーカー  型番 ・・・・ 11-02-003 aa物産  901i ・・・ 11-02-004 bb物産  602a ・・・ 21-02-001 cc物産  609a ・・・ 21-02-002 bb物産  702a ・・・ 31-02-001 aa物産  702b ・・・ 31-02-002 bb物産  608a ・・・ 31-02-003 cc物産  702a ・・・ 上記のようなデータがあり、装置番号を付与するとき 最初の2桁11、21と31のそれぞれで、末尾3桁が連番なので 最大値プラス1をしていきたいです (右三桁が連番です) 11-02-004の後に11-02-005の出し方が出来ませんでした。 それならば、最初の2桁11、21と31は別々にtableを作ったほうが いいですか? 分けて作ると60くらいのtableを作らなければ なりません、どのような作り方がいいか教えてください。 アクセス初心者用を見ていますが”これなら”というのが みつかりません。 よろしくお願いします。

みんなの回答

  • Masa2072
  • ベストアンサー率51% (94/182)
回答No.3

> 何度もありがとうございます。 いえいえ、今回の回答にあたり過去の質問を調べただけで、直接に回答したことはありませんので。 > 1ページに装置ごとに分かれて出てくれました > しかし装置全部なので1ページがすごく大きくなりました 当然大きくなると思います。 番号を全て使い切ると、10,000件のレコードになりますから。 WHERE句を Like '11-02*' などで絞込みを行えば該当レコードは1件以下になりますから問題ないですよね。 > その他はうまく出来ませんでした、出来ないと言うより > やり方が出来なかったほうが強いかも知れません 前回の質問でも同じですが、「うまく出来ない」ではなくて、「何をどう試したらどういう結果になった」と補足すると、新たな回答がもらえると思いますよ。 > 番号をとるのは新たに装置を購入したところ(者)で > 入力して自動で番号をとる形になっています。 入力はフォームで作成させることになると思うのですが、装置番号の先頭2桁と中2桁の数値に対応する項目を選らぶ、もしくは先頭5桁を手入力した時点で装置グループの最終番号を調べることが出来ます。 このタイミングでクエリーから該当装置グループの最終番号を取得して1を加算し、新たな装置番号とするモジュールを、ChangeイベントあAfterUpdateイベントで作成するとどうでしょうか?

lotsqq
質問者

補足

またすみません まず下記をやってみました >SELECT Left([装置番号],5) AS グループ, Max([装置番号]) AS 装置番号FROM テーブル1 GROUP BY Left([機器番号],5); サブクエリはかっこで括ってくださいと出ます、 selectのはじめに括弧をつけました、次は 指定した式でドット()!演算子、かっこの使い方が正しくありません となりカーソルはleftの後の( のところで点滅しています、 かっこを外すと次にテキストデータはダブルクォーテーションで囲む必要がありますとSELECT Left([装置番号],5)の5の前で点滅します。 何がいけないんでしょう?

  • keirika
  • ベストアンサー率42% (279/658)
回答No.2

直接の回答にはならないかも知れませんが、アクセスで処理をしようと すると難しくなりますので、もし、エクセルをお持ちであれば、一度 データをエクセルに落として、オートフィルなどで番号を振った後に アクセスにデータをインポートしてはどうでしょうか。

lotsqq
質問者

お礼

ありがとうございます。 実際はエクセルで使っていました。 しかし、すごく大きなシートで大変なのと (隠して使用する列、行があり) 番号をとるのは新たに装置を購入したところ(者)で 入力して自動で番号をとる形になっています。 そこで以前アクセスの資格を取ったことがあり アクセスに変更しようと考えました。 エクセルでは難しそうだったので、そしたら アクセスも難しいです。 でも一つでも成功すればもう一つとできるように なるかと頑張ってhelpやアクセスの初級者用をネットで みて、勉強中ですが中々私のしたいことに当てはまらず 困っていました。

  • Masa2072
  • ベストアンサー率51% (94/182)
回答No.1

以前から同様の質問をされているようですが、そのときの回答は参考にならなかったのでしょうか? > 11-02-004の後に11-02-005の出し方が出来ませんでした。 とあるので最大値を求めることはできたけど末尾に1加算する方法が分からないということでしょうか? クエリで SELECT Left([装置番号],5) AS グループ, Max([装置番号]) AS 装置番号 FROM テーブル1 GROUP BY Left([装置番号],5); 各装置分類の最大値一覧が取得できます。 この辺は以前の質問についた解答と同じはずです。 ここで装置番号の末尾を1加算した新しい番号を生成するには 末尾3桁を取り出し、数値に変換し1を加算する。 その後に先頭の6桁部分に結合する。 という処理を行う Function NewNumber(ByVal LastNumber) as String NewNumber = Left(LastNumber, 6) & Format(Cint(Right(LastNumber, 3) + 1, "000") End Function クエリから取得した最大の製品番号を上の関数に引数として渡せば、1加算された製品番号が返る ※エラー処理は一切していないので、製品番号の書式、桁数、などのチェックコードが必要になる。

lotsqq
質問者

お礼

ありがとうございました。 今まで何度か教えていただいたものを式をコピーして 試したのですが全てうまくいきませんでした。 何か一つでうまく出来るとよかったのですが。。

lotsqq
質問者

補足

何度もありがとうございます。 最大値を求めるとは言わないかも知れませんが 1ページに装置ごとに分かれて出てくれました しかし装置全部なので1ページがすごく大きくなりました。 その他はうまく出来ませんでした、出来ないと言うより やり方が出来なかったほうが強いかも知れません これから、先ほどのクエリもう一度やって見ます。

関連するQ&A

  • Accessでフォームからテーブルへ書き込む

    Access2000 (初心者) フォームからテーブルへ入力したいのですが、レコードソースが違う為入力出来ません。 DLookup("AA", "BB")で違うレコードから抽出出来る様に、違うレコードへ簡単に入力出来ないでしょうか? Me.CC = DLookup("AA", "BB") DLookup("AA", "BB") = Me.CC みたいに・・・

  • Access 末尾に0を追加したい

    Access2000 WindowsXPを使っています。 テーブルAのフィールドには12345と5ケタで入っているものがあって、 テーブルBは同じ番号ですが、123450と末尾に0がつき6ケタで表されているので、 桁を合わせたいと思っています。 末尾に0をつける方法を教えてください。

  • アクセスの集計について

    アクセスのクエリで、伝票番号でグループ化し、その横に、商品番号を並べたいです。 ★元テーブル★(名前:商品テーブル) 伝票番号 商品番号 1163069 AA01232 1168453 AAAA674 1168453 BBBB916 1174348 AA04041 1174348 BB04045 1174348 CC04041 ★作りたい状態★ 伝票番号 新商品番号 1163069 AA01232 1168453 AAAA674、BBBB916 1174348 AA04041、BB04045、CC04041 ★現状★ 伝票番号 新商品番号 1163069 AA01232、AA01232 1168453 AAAA674、BBBB916 1174348 AA04041、CC04041 SQLは、 SELECT 商品テーブル.伝票番号, First([商品番号]) & "、" & Last([商品番号]) AS 新商品番号 FROM 商品テーブル GROUP BY 商品テーブル.伝票番号; です。 first、lastが別に使いたいわけじゃないのですが、 他に方法がわからなくて使いました。 しかし、これだと、2つまでしか表示できないし、1つのものも 2つ表示されてしまって困っています。 わかりにくい質問で申し訳ありませんが、教えてください(^^)

  • ACCESS【オートナンバーで付与した数字を表示通り使用したい】

    オートナンバーで付与した数字を表示通り使用したい アクセス初心者ですので、質問がわかりにくかったらすみません。 管理番号を自動採番したいです 例:AA61200001、AA61200002、AA61200003 ... (1)AA:システム名(固定) (2)612:年月(YMD) (3)00001:00001~連番【見出し名は、管理番号ベース】 (テーブルでオートナンバーにし、書式を00000として、5桁表示させています) 但し、(2)が毎月変わるので、毎月入力するものとし、クエリでこの3つを引っ付けました。 管理番号: "AA" & [月付与フォームより入力] & [管理番号ベース] 私の予想では、  AA61200001 となるはずが、   AA6121 と、なってしまいました。 エクセルと同じように、あくまでも表示上5桁にしているだけだからだろうなあ。 と予想は出来たのですが、どのように対処すれば、いいのかわかりません。 色々方法はあると思いますが、初心者でもわかるやり方で どうか教えてください。

  • access2010  同一idを列に追加

    access2010についてselectの方法を教えてください。 ↓元テーブル id | name 1 | a 1 | b 2 | aa 2 | bb 2 | cc 取得したい内容 id| name1| name2| | name3 1| a | b| 2| aa | bb | cc アクセスとエクセルのマクロを駆使していますが、うまくできません。

  • 3テーブル外部結合方法について

    3つのテーブルを外部結合したいのですが・・・、 こんがらがってしまいました。 A,B,Cの3テーブルがあり、A,B,Cの順に外部結合 (LEFT OUTER JOIN)したいのですが、 A,BのテーブルについてはWhere句の条件指定が 必要です。 Select From (Select AA.a From A AA Where b = xxxx) BB Left Outer Join (Select CC.b From B CC Where c = eeee and BB.a = CC.b) On ???? こんな感じでつまづいてしまいました・・・

  • 3つのテーブルを結合した場合のWHERE

    MySQLで3つのテーブルを結合した場合のWHEREがよくわかりません。 まず、下のような2つのテーブルがあるとします。 【テーブルaa】 ID | Name -------------- 1 | x 2 | y 3 | z 【テーブルbb】 ID | hizuke | category --------------------- 1 | stamp1 | a 1 | stamp2 | b 1 | stamp3 | c 2 | stamp1 | a 2 | stamp2 | d 3 | stamp1 | c この2つのテーブルを結合して、同じIDでhizukeが最大値のデータを抽出するクエリは、 http://okwave.jp/qa/q6918385.htmlを参考にして、 SELECT aa.Name, bb.category FROM bb INNER JOIN aa ON aa.ID = bb.ID where (bb.ID, bb.hizuke) in (SELECT bb.ID, max(bb.hizuke) FROM bb group by bb.ID ) ; でできました。 しかし、もう1つテーブルを結合すると期待した結果が得られなくなってしまいました。 【テーブルcc】 category | choice --------------------- a | ss b | tt c | uu というテーブルがあって、上のクエリで得られた bb.categoryと cc.categoryをリンクして、choiceを取得しようとしたのですがうまくいきません。 SELECT aa.Name, bb.hizuke, bb.category, cc.choice FROM bb INNER JOIN cc ON bb. category = cc. category INNER JOIN aa ON aa.ID = bb.ID where (bb.ID, bb.category, bb.hizuke) in (SELECT bb.ID, bb.category, max(bb.hizuke) FROM bb group by bb.ID ); というクエリでは、ダメなようです。 INNER JOINを入れ子にしたり、いろいろと試したのですがどうにもうまくいきません。 どうも私の力では解決困難なようです。どなたかヘルプを。

  • Accessで指示書番号の自動採番

    入力フォームで指示書番号が自動採番され、テーブルにも保存されるようにするための方法を教えていただけないでしょうか。 テーブル:T_指示書 フィールド:指示書番号 フィールドはテキスト型で、番号の構成は8桁の番号で "年(二桁)" + "月(二桁)" +"部署番号(一桁、固定の数字)"+ "連番(三桁)" (例:09091001) という感じで、 年月が変われば、連番が001になるようにしたいです。 どなたか、ご教授いただければありがたいです。 よろしくおねがいします。 Access2002 winXP

  • Accessのオートナンバーに近い事をやりたい

    Accessのフィールドの型の中にオートナンバー型という、自動で連番になる型があります。 SQL Serverにはそういった型がないため、自分でナンバーを付与していくスクリプトを組まなくてはいけないと思います。 一番簡単な方法は、連番になっているフィールドを降順で並び替え、一番最初のレコードに1を足してあげれば連番になるのですが、Webで注文を受けるようなシステムの場合、タイミングによっては同じ番号を割り当てられてしまう可能性があります。 同じ番号がわりあてられずに連番で番号を付与していくには、どういうやり方があるのでしょうか?

  • アクセスで同じ種類のものを横に並べたい

    お世話になります。 アクセスでデータを取り込んだデータをエクセルで吐き出す為、横に並べたいと思っています。 種類 品物 a  aa-1 a  aa-3 a  aa-5 b  bb-3 c  cc-1 c  cc-2 上記のようなデータを 種類 品物1   品物2   品物3  a  aa-1    aa-3    aa-5  b  bb-3  c  cc-1    cc-2 というようにクロス集計をしたいと思っています 品物1 品物2 品物3にあたる列見出しをどのようにしたら良いか分かりません。 種類ごとにカウントでくる関数ってありますでしょうか? よろしくお願いします。

専門家に質問してみよう