• ベストアンサー

ACCESSで縦長の一覧表を作りたいのですが。

OSはWin XP、 Microsoft access 2000を使用しています。 EXCELのテーブルとして使おうと、 ACCESSで、うちの独自システムから商品マスタを 抜き取ろうとしています。 (すみません、この辺は流してくださって問題ないと思います) うちの商品は 品番・品名・色1~色10が入っているのですが、 これを抜き出すと、結果は 品番  品名   色1  色2  色3  色4 A1  帽子  赤   青    黄   黒 A2  手袋  青   緑   ピンク  オレンジ A3  靴下  白   黒    灰    ・ ・ ・ という風に、品番ごとに表示されてしまいます。 これを A1  帽子  赤 A1  帽子  青 A1  帽子  黄 A1  帽子  黒 A2  手袋  青 A2  手袋  緑 ・ ・ ・ という風に、エクスポートしたときに、品番・色ごとの縦長の表形式で表示させる事は可能でしょうか? 分りにくい説明で申し訳ありません。 初心者ですみませんが、教えてください。 月初の処理で行き詰まってもう大変で・・・。 資料 データは1000件以上あります。 色数は1色から最高10色まであります。

質問者が選んだベストアンサー

  • ベストアンサー
  • hakone
  • ベストアンサー率54% (40/73)
回答No.1

こんにちは。 小生はEXCELの方がなれているので、貼り付けてから 変更する方法を。(^^ゞ まず、そのマスタをそのままEXCELにエクスポートします。 (コピペでも可です) Sheet1に貼り付けたとして、 A列とB列が品番と品名で、 C列~L列が色だとします。 Sheet2の A1に「品番」 B1に「品名」 C1に「色」 A2に =INDEX(Sheet1!A:A,ROW(A10)/10+1) B2に =INDEX(Sheet1!B:B,ROW(A10)/10+1) C2に =INDEX(Sheet1!C:L,ROW(A10)/10+1,MOD(ROW(A1)-1,10)+1) と書いて、A2:C2を下の方まで、ずーとコピーします。 (1000行×10色で10000行以上・・・) で、次に、その式の書いてある何処かのセルを 選択しておいて、メニューから[データ][フィルタ] [オートフィルタ]を実行します。 その後、C列で0となっている部分を▼から選択して、 0となっている部分を全て選択してから、右クリックから 行の削除を実行してみて下さい。 0の選択は、C2のセル辺りから、CTRL+SHIFT+↓を押すと 簡単に選択できると思います。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

AccessのADOでやって見ました。どうしても他の方法が 良くないのなら使ってやってください。 (元データ)テーブル=私の場合はエクセルからインポート (質問のデータをシートにコピーし、データ-区切り位置 でデータ化した後にアクセスインポートしテーブル化。A1の黒だけ省いてしまった。) ID 品番 品名 色1 色2 色3 色4 色5 1 A1 帽子 赤 青 黄 2 A2 手袋 青 緑 ピンク オレンジ 3 A3 靴下 白 黒 灰 (VBAコード) 繰り返しに持ちこみたかったが、済みません力不足。フィールドの数だけ羅列式になっている。 Private Sub test02() Dim conn As Connection Dim rs As ADODB.Recordset Dim rst As ADODB.Recordset Set conn = CurrentProject.Connection Set rs = New ADODB.Recordset Set rst = New ADODB.Recordset rs.Open "商品1", conn, adOpenKeyset, adLockOptimistic rst.Open "商品2", conn, adOpenKeyset, adLockOptimistic rs.MoveFirst Do Until rs.EOF If IsNull(rs!色1) Then GoTo p01 With rst .AddNew rst!品番 = rs!品番 rst!品名 = rs!品名 rst!色 = rs!色1 .Update End With If IsNull(rs!色2) Then GoTo p01 With rst .AddNew rst!品番 = rs!品番 rst!品名 = rs!品名 rst!色 = rs!色2 .Update End With If IsNull(rs!色3) Then GoTo p01 With rst .AddNew rst!品番 = rs!品番 rst!品名 = rs!品名 rst!色 = rs!色3 .Update End With If IsNull(rs!色4) Then GoTo p01 With rst .AddNew rst!品番 = rs!品番 rst!品名 = rs!品名 rst!色 = rs!色4 .Update End With If IsNull(rs!色5) Then GoTo p01 With rst .AddNew rst!品番 = rs!品番 rst!品名 = rs!品名 rst!色 = rs!色5 .Update End With p01: rs.MoveNext Loop rs.Close rst.Close Set rs = Nothing Set rst = Nothing conn.Close Set connn = Nothing End Sub (結果) ID 品番 品名 色 22 A1 帽子 赤 23 A1 帽子 青 24 A1 帽子 黄 25 A2 手袋 青 26 A2 手袋 緑 27 A2 手袋 ピンク 28 A2 手袋 オレンジ 29 A3 靴下 白 30 A3 靴下 黒 31 A3 靴下 灰 (レポート) A1    帽子          赤        青        黄 A2    手袋         青        緑        ピンク ・・・・・

回答No.3

商品の情報が格納されているテーブル名が不明なので「商品」ということで記述します。 (1) クエリを新規作成して、クエリの種類をユニオンにします(メニューで「クエリ」-「SQL」-「ユニオン」を選択)。 (2) ユニオンクエリの画面が表示されたら、次の内容をコピー&ペーストします。 SELECT 品番, 品名, 色1 FROM 商品 WHERE 色1 is not null UNION SELECT 品番, 品名, 色2 FROM 商品 WHERE 色2 is not null UNION SELECT 品番, 品名, 色3 FROM 商品 WHERE 色3 is not null UNION SELECT 品番, 品名, 色4 FROM 商品 WHERE 色4 is not null UNION SELECT 品番, 品名, 色5 FROM 商品 WHERE 色5 is not null UNION SELECT 品番, 品名, 色6 FROM 商品 WHERE 色6 is not null UNION SELECT 品番, 品名, 色7 FROM 商品 WHERE 色7 is not null UNION SELECT 品番, 品名, 色8 FROM 商品 WHERE 色8 is not null UNION SELECT 品番, 品名, 色9 FROM 商品 WHERE 色9 is not null UNION SELECT 品番, 品名, 色10 FROM 商品 WHERE 色10 is not null ORDER BY 品番; (3) クエリを実行すると、品番・色ごとの表形式で表示されます。 ・テーブル名、フィールド名が間違っているとエラーになりますので、その場合正確な名称に修正してください。 (4) (3)の実行結果をエキスポートします。 余計なことですが、商品マスタの構造は、非正規形といって一般的に最も良くない形式です。 正規化されていれば、もっと簡単に取り出せます。

  • hakone
  • ベストアンサー率54% (40/73)
回答No.2

申し訳ないです。 書き漏らしがありました。 式を入力してから、オートフィルタを実行する前に、 A列からC列を選択して、 コピーをし、そのまま、「形式を選択して貼り付け」から「値」を 選んで[OK]を押して、値にしておいて下さい。 ↑m(_ _)m