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

解決済みの質問

EXCEL:商品コードを主にしてカテゴリを横並びに

お世話になります。
同じような質問が今までもあったかもしれないのですが、
何と検索していいか分からず思ったような検索結果が
得られなかったので質問させていただきます。

エクセル2016を使用しています。

A列に商品コード
B列に商品コードに対するカテゴリー(レディース服やスカート、カジュアルといったカテゴリーです)が一つの商品コードに対して複数入力されています。
(1つ~5つでバラバラです)

それをA列に商品コード、B以降の列にカテゴリーが入力されている表にしたいのですが
可能でしょうか?(商品コードに対してのカテゴリーを横並びにしたいです)

A列       B列     C列   D列
商品コード1234 レディース服 スカート カジュアル

可能な場合どのようにしたらいいかお教えいただけないでしょうか?

よろしくお願いいたします。

投稿日時 - 2016-08-02 05:46:35

QNo.9209804

困ってます

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

#5です。
例と目的を勝手に作ってVBAで、やってみた。参考に。
VBAに興味がなければスルーしてください。
データ例
商品コードカテゴリ
A101X
A102A
A101Y
A101Z
A102B
A101Y
A102C
A101W
A102B
A101Z
A103U
ソートして、Sheet1に
商品コードカテゴリ
A101W
A101X
A101Y
A101Y
A101Z
A101Z
A102A
A102B
A102B
A102C
A103U
このデータを対象にして下記VBAうお実行。
標準モジュールに
Sub test01()
'データはA,B列でソートしておく
'--最終行番号取得
lr = Worksheets("Sheet1").Range("A100000").End(xlUp).Row
MsgBox lr
'--第2行目データで初期値設定
i = 2 'Sheet1最初処理行 第1行目は見出し行
j = 2 'Sheet2へのアウトプット最初行 第1行目は見出し行
K = 2 'Sheet2へのアウトプット最初列 第1列目は商品コード列
'--第2行目=データの最初、を特別扱い sheet2へ
Worksheets("Sheet2").Cells(j, "A") = Worksheets("Sheet1").Cells(i, "A")
Worksheets("Sheet2").Cells(j, "B") = Worksheets("Sheet1").Cells(i, "B")
K = K + 1
m = Worksheets("Sheet1").Cells(i, "A") '次行では第2行を直前行とする(商品コード)
m2 = Worksheets("Sheet1").Cells(i, "B") '次行では第2行を直前行とする(カテゴリ)

'--第3行目以降繰り返し
For i = 3 To lr
'直前行と商品コードが同じか
If Worksheets("Sheet1").Cells(i, "A") = m Then
'同じなららば
'カテゴリが同じで無ければ
If Worksheets("Sheet1").Cells(i, "B") <> m2 Then
Worksheets("Sheet2").Cells(j, K) = Worksheets("Sheet1").Cells(i, "B")
K = K + 1
End If
Else
'直前行と商品コードが同字でなければ
j = j + 1
Worksheets("Sheet2").Cells(j, "A") = Worksheets("Sheet1").Cells(i, "A")
K = 2 '新出の商品コードは第2列へ
Worksheets("Sheet2").Cells(j, K) = Worksheets("Sheet1").Cells(i, "B")
K = K + 1 '次行では次列へ
End If
m = Worksheets("Sheet1").Cells(i, "A") '直前行のデータ(商品コード)として次行へ引き継ぎ
m2 = Worksheets("Sheet1").Cells(i, "B") '直前行のデータ(カテゴリ)として次行へ引き継ぎ
Next i
End Sub
をコピペ
ーー
実行(F5キーを押す)処理結果
Sheet2の第2行以下
商品コード カテゴリーー>今回はこの見出し(第1行目)は手入力
A101WXYZ
A102ABC
A103U

投稿日時 - 2016-08-02 11:50:49

お礼

ありがとうございます!!!
思った通りのものができました!!
自分では作れなかった内容ですので本当に感謝します!!!
VBA、覚えると便利ですね~。
今後も活用できそうです。
本当に助かりました。ありがとうございました!!

投稿日時 - 2016-08-04 05:49:12

ANo.6

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

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

回答(7)

ANo.7

通常は区切り位置という機能を使って,B列に詰め込まれたデータをB,C,D…列に分割します

参考:
https://support.office.com/ja-jp/article/Excel-2016-for-Mac-%25E3%2581%25A7%25E7%2595%25B0%25E3%2581%25AA%25E3%2582%258B%25E3%2582%25BB%25E3%2583%25AB%25E3%2581%25AB%25E6%2596%2587%25E5%25AD%2597%25E5%2588%2597%25E3%2582%2592%25E5%2588%2586%25E5%2589%25B2%25E3%2581%2599%25E3%2582%258B-0db6f9b6-66fd-4c23-b450-14f8d97441e1?ui=ja-JP&rs=ja-JP&ad=JP&fromAR=1


参考URLは2つのデータを2列に分割するお話になっていますが,別に3つ4つが詰め込まれていても構わず操作します。
既出回答でも寄せられていますが,「レディース服」と「カジュアル」といった分割要素が,具体的にどのように区切られて今記入されているのかに応じて,具体的な操作を調整して行ってください。

といっても,必ずしも例えば「カンマで統一」されている必要は,実際にはありません。あるデータはカンマ区切りで記入され,別のデータはスペースで区切られているみたいな場合でも,カンマとスペースの両方にチェックを入れて区切ってしまえば問題ありません。

投稿日時 - 2016-08-02 23:26:24

補足

説明が不足しており申し訳ございません。
B列の1セルに1つのカテゴリーが入っている状態です。

A列   B列
1234  レディース服
1234  カジュアル
1234  スカート
9999  メンズ服
9999  パンツ
5555  ドレス
6666  子供服
6666  肌着

このような形で、1行に1カテゴリーが入っていて
1つの商品コードに対しては1~5カテゴリーが入力されている、
といった感じなんです。

投稿日時 - 2016-08-04 05:23:05

ANo.5

今からそういう表を作りたいということ(人手によるインプット問題)なのか。質問の趣旨がはっきりしない。
データ表がすでにできていて、商品コードに対するカテゴリをB列以右列に出したいのなら、そのデータシートを商品コードでソートし、ある商品コードのカテfゴリが以下の行に集まって出るから、それをB列以下に表示していけばよい。VBAでやれば簡単。

人手によるインプット問題で入力をやりやすくする問題なら、
商品コードが5つか6つまで(私の主観)なら、エクセルの有名な機能の「入力規則」の「リスト型」でできる。これは考えかたが複雑で、初心者にはむつかしい(エクセル上級者向け)だろう。
説明例
http://www.yskzt.com/how-we-should-make-drop-down-list-with-INDIRECT-function-and-Name20150225
しかし商品コードが多数あると、商品コードとそのカテゴリの対応関係のデータベースが必要になる。そうなるとデータベースを扱う、最低でもアクセス(その他オラクルなど)の利用するのが普通だろう。商品コードを指定するとそのカテゴリを教えてくれる(SQLが使える)ソフトが便利。
またアクセスにはそれに適した機能が用意されている。
どうしてもエクセルのシートに対応データ(ある商品コードにどういうカテゴリがあるかの明細)を置いて、やるのなら、VBAを使える必要があると思う。

投稿日時 - 2016-08-02 10:04:11

補足

別の方が提示して下さったVBAで解決できました。
ご回答いただき本当にありがとうございました。

投稿日時 - 2016-08-04 05:50:03

お礼

(先ほど誤って補足に同じ内容を記載してしまいました。すみません。。)

別の方が提示して下さったVBAで解決できました。
ご回答いただき本当にありがとうございました。

投稿日時 - 2016-08-04 05:50:40

ANo.4

それぞれのカテゴリの項目数が多くないなら、
B列はそのままデータとして利用し、
それいこうの列CとDとEでカテゴリを分けます。

こんな感じです。
=IF(NOT(ISERROR(FIND("レディース服",B2))),"レディース服",IF(NOT(ISERROR(FIND("メンズ服",B2))),"メンズ服",IF(NOT(ISERROR(FIND("子供服",B2))),"子供服","該当なし")))
項目が多いと言うことは、その分文字数が多くなるので、
ひとつのセルの文字数の限界にたっする可能性があります。


そして重要な点があります。
これはあくまで暫定的な対応ということです。
私でしたら、
データ整理ができたら、値のみコピペし、
このような式の無いシートにし、
それぞれカテゴリは入力規制して、
勝手な項目は入力できないようにします。
もちろんB列は削除します。


あと商品の数が1000以下なら、
手作業のほうがてっとり早い気もしてます。

投稿日時 - 2016-08-02 10:03:33

補足

説明が不足しており申し訳ございません。
実際はもっと長いカテゴリー名で、200種類くらいあり、
行数も約13000行ありまして、IF関数だと厳しそうです。。
せっかくご回答いただきましたのにすみません。。

投稿日時 - 2016-08-04 05:35:29

お礼

別の方が提示して下さったVBAで解決できました。
ご回答いただき本当にありがとうございました。

投稿日時 - 2016-08-04 05:51:12

ANo.3

》 A列に商品コード
》 B列に商品コードに対するカテゴリー
というのは、添付図のトッチ?

大変申し訳ございませんが、この投稿に添付された画像や動画などは、「BIGLOBEなんでも相談室」ではご覧いただくことができません。 OKWAVEよりご覧ください。

マルチメディア機能とは?

投稿日時 - 2016-08-02 09:28:05

補足

画像まで作っていただいてありがとうございます。
添付していただいた図の下の状態が、約13000行あるんです。。
カテゴリーも商品コードもたくさんありすぎるんですが、
1商品コードに対するカテゴリーを右側に1セル1カテゴリーで並べたいんです。

投稿日時 - 2016-08-04 05:29:17

お礼

別の方が提示して下さったVBAで解決できました。
ご回答いただき本当にありがとうございました。

投稿日時 - 2016-08-04 05:51:06

ANo.2

B列の複数カテゴリをカテゴリ別に分けたいということなら、B列の1セル内に含まれるカテゴリ文字列をカテゴリ別に分離することが必要であり、セル内の文字列をカテゴリの分かれ目の分離符で認識して分けたり、決まった1カテゴリを文字列全体から抽出して、別セルに格納することが必要
そうやって、ひとつのセルに複数含まれるカテゴリのカタマリを、別セルに分けて1セル1カテゴリとすれば、セルの並べ替えでコードごとにカテゴリを並べることも可能でしょう

投稿日時 - 2016-08-02 08:01:10

補足

説明が不足しており申し訳ございません。
B列の1セルに1つのカテゴリーが入っている状態です。

A列   B列
1234  レディース服
1234  カジュアル
1234  スカート
9999  メンズ服
9999  パンツ
5555  ドレス
6666  子供服
6666  肌着

このような形で、1行に1カテゴリーが入っていて
1つの商品コードに対しては1~5カテゴリーが入力されている、
といった感じなんです。
それが約13000行あります。

投稿日時 - 2016-08-04 05:31:19

お礼

別の方が提示して下さったVBAで解決できました。
ご回答いただき本当にありがとうございました。

投稿日時 - 2016-08-04 05:50:59

ANo.1

B列には、「レディース服」「スカート」「カジュアル」の文字が、具体的にどのように入っているのですか?

知りたいのは、区切り記号として、何を使っているか、ということです。

「レディース服 スカート カジュアル」と、スペースなのか、「レディース服、スカート、カジュアル」と「、」なのか、ということが知りたいのですが、もし、区切り記号がそのときそのときで、いろいろだと、かなり難しいかと思います。

投稿日時 - 2016-08-02 07:24:11

補足

説明が不足しており申し訳ございません。
B列の1セルに1つのカテゴリーが入っている状態です。

A列   B列
1234  レディース服
1234  カジュアル
1234  スカート
9999  メンズ服
9999  パンツ
5555  ドレス
6666  子供服
6666  肌着

このような形で、1行に1カテゴリーが入っていて
1つの商品コードに対しては1~5カテゴリーが入力されている、
といった感じなんです。

投稿日時 - 2016-08-04 05:31:34

お礼

別の方が提示して下さったVBAで解決できました。
ご回答いただき本当にありがとうございました。

投稿日時 - 2016-08-04 05:50:50

あなたにオススメの質問