- 締切済み
アクセスでのセル内データの条件分割方法
前回エクセルで質問したのですが、データがたくさんありすぎてエクセルでの作業では応答できません状態で処理ができませんので、アクセスでできればと思いご教授お願いいたします。 当方アクセスも初心者に近いので詳しくご教授お願いいたします。 アクセスにエクセルデータをインポートしてSheet1とSheet2というテーブルを作成してみました。 Sheet1にある品番の列のデータをSheet2にある商品管理番号と共通している部分と共通していない部分に分けたいと思います。 品番は60000.あります。商品管理番号は15000あります。 シート1とシート2の品番と管理番号の並びは相対していませんので探して照合していくことになります。 出てきたデータは”商品番号”と”サイズ”としてSHEET1のデータに追加した形で表示できればと思っております。 クエリでできるのではないかと思いますのでどうかご教授お願いでしませんでしょうか? 当方大変困って仕事に支障をきたしている次第です。 よろしくお願いいたします。
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- bin-chan
- ベストアンサー率33% (1403/4213)
状況はどうなってますか? 誤記があったので訂正します。 > 2)名前は「商品管理番号から品番サイズを分割」としてください。 > select 商品管理番号, 品番, left(品番, len(商品管理番号)) as 分割した品番, > mid(品番, len(商品管理番号)+1, len(品番)-len(商品管理番号)) as 分割したサイズ > from sheet2 left join on (商品管理番号) = left(品番, len(商品管理番号)) の最終行 from 商品管理番号ユニーク left join on (商品管理番号) = left(品番, len(商品管理番号))
- bin-chan
- ベストアンサー率33% (1403/4213)
あきらめちゃったのかな? 例示のデータでパターン網羅できてるとは思えませんが、以下のクエリ2つを新規作成してください。 SQLビューにして以下をコピペ。 1)名前は「商品管理番号ユニーク」としてください。 select distinct 商品管理番号 from sheet2; 2)名前は「商品管理番号から品番サイズを分割」としてください。 select 商品管理番号, 品番, left(品番, len(商品管理番号)) as 分割した品番, mid(品番, len(商品管理番号)+1, len(品番)-len(商品管理番号)) as 分割したサイズ from sheet2 left join on (商品管理番号) = left(品番, len(商品管理番号)) ; 2)がsheet2の商品管理番号を一致するsheet1の品番を、品番・サイズを分割したもの。 これでサイズまでがわかるでしょう。 さらにもうひとつクエリを新規作成。 3)名前は「Sheet1の確認」とでもしてください。 select 品番, 分割した品番, 分割したサイズ from sheet1 left join [商品管理番号から品番サイズを分割] on (sheet1.品番 = [商品管理番号から品番サイズを分割].品番) ; 必ずこの結果がSheet1の行数と一致していることを確認してください。 さらに3)「Sheet1の確認」をコピペしてください。 4)名前は「Sheet1だけにあるもの」とでもしてください。 select 品番, 分割した品番, 分割したサイズ from sheet1 left join [商品管理番号から品番サイズを分割] on (sheet1.品番 = [商品管理番号から品番サイズを分割].品番 where [商品管理番号から品番サイズを分割].品番 is null ; いちどに6万行のデータで実行すると何かとしんどいと思います。 サンプルを絞り込んで仕組み(クエリ)を組み立てて動作確認してから sheet1とsheet2を本番データにした方が楽と思います。 小生はこれをもってクローズさせていただきます。
- bin-chan
- ベストアンサー率33% (1403/4213)
> ”クエリ式’[商品管理番号]キー’の構文エラー:演算子がありません” unionまでは通ったようですから多少は進んだのかな?こちらでは動くんですが。 > 突合せキーのクエリは実行してみたところエラーは出ていません。 クエリ「突合せキー」は「演算子がありません」で止まったんですか? それとも動いたんですか?どちら? 「クエリ「突合せキー」が動かない」なら困ったので[ ]を取りのぞいてください。 select 品番 as キー from Sheet1 union select 商品管理番号 as キー from Sheet2 ; 動いたのであれば先に進めてみてください。一致・片側一致の件数を知りたい。 ---------------------------- 例示のデータを拝見するにSheet2の「商品管理番号」は、重複を取り除けばマスター化できそう。 先にSheet2の整理をしたほうがよさそうですね。 「商品管理番号」「商品管理番号の桁数」は何パターンあるか。 その上で「商品管理番号」と「商品管理番号の桁数」をSheet1の「品番」から切り出して 切り出した部分で一致したら、残り部分がサイズに出来そう。
- bin-chan
- ベストアンサー率33% (1403/4213)
> 品番を品番とサイズの二つに分ける必要性が出てきました。 例示データが少なすぎ。 せめて「先頭10文字までを品番とみなす」や「品番は末尾2桁」くらいは提示してください。 #前質問のNo.5さんと同じことを書いてしまいそう・・・。 まずは一致・不一致のリストを作成してください。 その件数で次の手を考えましょう。 勤め人なので平日はこのくらいの時刻からになりますが、 がんばるおつもりがあるならお付き合いしますので。
- bin-chan
- ベストアンサー率33% (1403/4213)
申し訳ありません。asが抜けてます。 select [品番] as キー from Sheet1 union select [商品管理番号] as キー from Sheet2 ; 取り急ぎお知らせします
- bin-chan
- ベストアンサー率33% (1403/4213)
キーそのものの編集をしない前提で、2テーブルの突合せの例です。 [考え方]以下の3ステップで進めてください。 1)まず、Sheet1の品番とSheet2の商品管理番号とをひとつにする。(重複は除去する) 2)1)の結果の左右にSheet1の品番とSheet2の商品管理番号の一致するデータを並べる。 並べると以下の3通り a 1)とSheet1の品番とSheet2の商品管理番号の両方が一致する b 1)とSheet1の品番が一致する c 1)とSheet2の商品管理番号が一致する ※「両方とも一致しない」は1)の条件によりありえない。 3)Sheet1とSheet2いずれかが無いものを手当てする。 [作り方] 1-1)クエリのデザインビューで新規作成します。(テーブルの追加」は不要) 1-2)デザインビューをSQLビューに変更し以下をコピペ。 select [品番] キー from Sheet1 union select [商品管理番号] キー from Sheet2 ; 1-3「名前を付けて保存」で「突合せキー」としてください。 2-1)クエリのデザインビューで新規作成します。 2-2)テーブル「Sheet1」「Sheet2」、クエリ「突合せキー」を選びます。 2-3)テーブル「Sheet1」の列[品番]をダブルクリック。 2-4)クエリ「突合せキー」の列[キー]をダブルクリック。 2-5)テーブル「Sheet2」の列[商品管理番号]をダブルクリック。 2-6)クエリ「突合せキー」の列[キー]をテーブル「Sheet1」の列[品番]にドラッグ。 2-7)結合線が表示されるのでダブルクリック 2-8)結合パターンが3つ示され1が選ばれているので3or3の「突合せキーの全レコード・・」を選ぶ。 2-9)クエリ「突合せキー」の列[キー]をテーブル「Sheet2」の列[商品管理番号]にドラッグ。 2-10)結合パターンが3つ示され1が選ばれているので3or3の「突合せキーの全レコード・・」を選ぶ。 2-11)「名前を付けて保存」で「突合せ結果(全件)」としてください。 2-12)クエリ「突合せ結果(全件)」をコピペして「突合せ結果(一致のみ)」としてください。 2-13)クエリ「突合せ結果(一致のみ)」をデザインビューで開いてください。 2-14)2本の結合線をそれぞれダブルクリックしパターン1に戻してください。 2-15)上書き保存して閉じてください。 2-16)クエリ「突合せ結果(全件)」をコピペして「突合せ結果(Sheet1のみ存在)」としてください。 2-17)クエリ「突合せ結果(Sheet1のみ存在)」をデザインビューで開いてください。 2-18)列[商品管理番号]の検索条件に "Is Null"を設定してください。 2-19)上書き保存して閉じてください。 2-20)クエリ「突合せ結果(全件)」をコピペして「突合せ結果(Sheet2のみ存在)」としてください。 2-21)クエリ「突合せ結果(Sheet2のみ存在)」をデザインビューで開いてください。 2-22)列[品番」の検索条件に "Is Null"を設定してください。 2-23)上書き保存して閉じてください。 3)以下のクエリを用いてデータ編集してください。 1-a)Sheet1の品番とSheet2の商品管理番号の両方が一致する クエリ「突合せ結果(一致のみ)」 1-b)1)とSheet1の品番が一致する クエリ「突合せ結果(Sheet1のみ存在)」 1-c)1)とSheet2の商品管理番号が一致する クエリ「突合せ結果(Sheet2のみ存在)」 おまけ 1)Sheet1の品番とSheet2の商品管理番号のいずれかあるいは両方が一致するもの クエリ「突合せ結果(全件)」
補足
いろいろ不手際があり申し訳ございません。 ご教授ありがとうございます。 select [品番] キー from Sheet1 union select [商品管理番号] キー from Sheet2 ; 上記の構文をコピペし、新規のクエリを作成し、デザインビューでSheet1、Sheet2、突合せキーを選択したところ、突合せキーで下記のエラーが出ます。 ”クエリ式’[品番]キー’の構文エラー:演算子がありません。” 上記のようなエラーが出ます。 併せて補足させていただきますと、品番、商品管理番号ともに桁数は一定ではなく、品番にサイズが入ったデータが送られてくるようになったので、品番を品番とサイズの二つに分ける必要性が出てきました。 品番は、商品管理番号が品番になっておりますので、Sheet1の方に品番が入っており、Sheet2の方に商品管理番号が入っております。 Sheet1の品番にサイズが入っているためにこのままでは使用できなく子の品番を、サイズと品番に分けたいと思います。 この分けたデータをsheet1の方に別々にセルに書き出せればと思いっています。 http://okwave.jp/qa/q7961856.html 上記が前回の質問になりますが、ベストアンサーを付けた答えが思う結果表示されましたが、いかんせん時間がかかりますので、アクセスでできないものかと考えました。 例:11SS25369SS←SHEET1にある品番 11SS25369 ←Sheet2にある商品管理番号 上記のSheet1の品番を、11SS25369SSの横に11SS25369その横のセルにSSを表示できればと思います。 わかりにくい説明で申し訳ございませんがご教授願えればと思います。 よろしくお願いいたします。
- bin-chan
- ベストアンサー率33% (1403/4213)
> 前回エクセルで質問したのですが、 前提がわかりません。 「前の質問を捜すこと」も回答者が行うことですか?せめてアンカー貼ってください。 > シート1とシート2の品番と管理番号の並びは相対していません 結合する際には、並びは関係ありません。 > 共通している部分と共通していない部分に分けたい 幸いなことにアクセスでは、全角・半角・大文字・小文字の差を意識しません。 クエリでもEXCELと同じくleft関数・mid関数・right関数等を用いることになるでしょう。 それぞれの様式・突合せするルールを例示してください。桁数なども。
補足
なかなか慣れてないもので質問の仕方もまずくすみません。 時間がかかってもよいので、差しさわりの内容にご教授くださいませ。 下記の構文をコピペしたところ ”クエリ式’[商品管理番号]キー’の構文エラー:演算子がありません” と出ます。 突合せキーのクエリは実行してみたところエラーは出ていません。 また、商品管理番号も品番も桁数が一定ではないので区切るに区切れない状況で、サイズも洋服、靴、子供用と多様なために下3ケタがサイズ表記になっている特定が出来ません。 在庫を更新するために、品番を商品管理番号とサイズに分ける必要性があるのですがこちらが作成したデータではサイズ抜きのデータがありますので、その商品管理番号をもとに品番から品番とサイズとに分けれればと思います。 また、サイズが入っていない品番もあります。 例: 元データ 分けたい形式 品番シート1 商品管理番号シート2 品番 サイズ 12aa12345ss 12aa12345 12aa12345 ss 12aa12345s 12aa12345 12aa12345 s 12aa12345m 12aa12345 12aa12345 m 12aa12345l 12aa12345 12aa12345 l 22bb2223120 22bb2223 22bb2223 120 22bb2223130 22bb2223 22bb2223 130 22bb2223140 22bb2223 22bb2223 140 22bb2223150 22bb2223 22bb2223 150 22bb2223160 22bb2223 22bb2223 160 33cc356200 33cc356 33cc356 200 33cc356205 33cc356 33cc356 205 33cc356210 33cc356 33cc356 210 33cc356215 33cc356 33cc356 215 33cc356220 33cc356 33cc356 220 桁数がそろってないうえに区切り位置もまちまちなので・・・。 この、品番とサイズに分けたデータをシート1の方に出力できればと思います。 少しずつでも作成していきたいと思いますので気長にお願いします。 うまく書いて伝えれませんがよろしくお願いいたします。