アプリ版:「スタンプのみでお礼する」機能のリリースについて

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色まであります。

A 回答 (4件)

こんにちは。



小生は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+↓を押すと
簡単に選択できると思います。
    • good
    • 0

申し訳ないです。


書き漏らしがありました。


式を入力してから、オートフィルタを実行する前に、
A列からC列を選択して、
コピーをし、そのまま、「形式を選択して貼り付け」から「値」を
選んで[OK]を押して、値にしておいて下さい。

↑m(_ _)m
    • good
    • 0

商品の情報が格納されているテーブル名が不明なので「商品」ということで記述します。



(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)の実行結果をエキスポートします。



余計なことですが、商品マスタの構造は、非正規形といって一般的に最も良くない形式です。
正規化されていれば、もっと簡単に取り出せます。
    • good
    • 0

AccessのADOでやって見ました。

どうしても他の方法が
良くないのなら使ってやってください。
(元データ)テーブル=私の場合はエクセルからインポート
(質問のデータをシートにコピーし、データ-区切り位置
でデータ化した後にアクセスインポートしテーブル化。A1の黒だけ省いてしまった。)
ID品番品名色1色2色3色4色5
1A1帽子赤青黄
2A2手袋青緑ピンクオレンジ
3A3靴下白黒灰
(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品番品名色
22A1帽子赤
23A1帽子青
24A1帽子黄
25A2手袋青
26A2手袋緑
27A2手袋ピンク
28A2手袋オレンジ
29A3靴下白
30A3靴下黒
31A3靴下灰
(レポート)
A1
   帽子  
       赤
       青
       黄
A2
   手袋 
       青
       緑
       ピンク
・・・・・
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!