• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCEL:商品コードを主にしてカテゴリを横並びに)

EXCEL:商品コードをカテゴリで横並びにする方法

このQ&Aのポイント
  • エクセル2016を使用して、A列に商品コード、B以降の列に商品コードに対するカテゴリーを横並びに表示する方法を教えてください。
  • 商品コードに対して複数のカテゴリーが入力されている表を作成したいです。
  • 商品コード1234に対してレディース服、スカート、カジュアルというカテゴリーがあります。これらを横並びに表示する方法を教えてください。

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

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

#5です。 例と目的を勝手に作ってVBAで、やってみた。参考に。 VBAに興味がなければスルーしてください。 データ例 商品コード カテゴリ A101 X A102 A A101 Y A101 Z A102 B A101 Y A102 C A101 W A102 B A101 Z A103 U ソートして、Sheet1に 商品コード カテゴリ A101 W A101 X A101 Y A101 Y A101 Z A101 Z A102 A A102 B A102 B A102 C A103 U このデータを対象にして下記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行目)は手入力 A101 W X Y Z A102 A B C A103 U

mameanna
質問者

お礼

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

その他の回答 (6)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.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つが詰め込まれていても構わず操作します。 既出回答でも寄せられていますが,「レディース服」と「カジュアル」といった分割要素が,具体的にどのように区切られて今記入されているのかに応じて,具体的な操作を調整して行ってください。 といっても,必ずしも例えば「カンマで統一」されている必要は,実際にはありません。あるデータはカンマ区切りで記入され,別のデータはスペースで区切られているみたいな場合でも,カンマとスペースの両方にチェックを入れて区切ってしまえば問題ありません。

mameanna
質問者

補足

説明が不足しており申し訳ございません。 B列の1セルに1つのカテゴリーが入っている状態です。 A列   B列 1234  レディース服 1234  カジュアル 1234  スカート 9999  メンズ服 9999  パンツ 5555  ドレス 6666  子供服 6666  肌着 このような形で、1行に1カテゴリーが入っていて 1つの商品コードに対しては1~5カテゴリーが入力されている、 といった感じなんです。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.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を使える必要があると思う。

mameanna
質問者

お礼

(先ほど誤って補足に同じ内容を記載してしまいました。すみません。。) 別の方が提示して下さったVBAで解決できました。 ご回答いただき本当にありがとうございました。

mameanna
質問者

補足

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

  • skp026
  • ベストアンサー率45% (1010/2238)
回答No.4

それぞれのカテゴリの項目数が多くないなら、 B列はそのままデータとして利用し、 それいこうの列CとDとEでカテゴリを分けます。 こんな感じです。 =IF(NOT(ISERROR(FIND("レディース服",B2))),"レディース服",IF(NOT(ISERROR(FIND("メンズ服",B2))),"メンズ服",IF(NOT(ISERROR(FIND("子供服",B2))),"子供服","該当なし"))) 項目が多いと言うことは、その分文字数が多くなるので、 ひとつのセルの文字数の限界にたっする可能性があります。 そして重要な点があります。 これはあくまで暫定的な対応ということです。 私でしたら、 データ整理ができたら、値のみコピペし、 このような式の無いシートにし、 それぞれカテゴリは入力規制して、 勝手な項目は入力できないようにします。 もちろんB列は削除します。 あと商品の数が1000以下なら、 手作業のほうがてっとり早い気もしてます。

mameanna
質問者

お礼

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

mameanna
質問者

補足

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

  • msMike
  • ベストアンサー率20% (364/1804)
回答No.3

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

mameanna
質問者

お礼

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

mameanna
質問者

補足

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

  • OKWavex
  • ベストアンサー率22% (1222/5383)
回答No.2

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

mameanna
質問者

お礼

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

mameanna
質問者

補足

説明が不足しており申し訳ございません。 B列の1セルに1つのカテゴリーが入っている状態です。 A列   B列 1234  レディース服 1234  カジュアル 1234  スカート 9999  メンズ服 9999  パンツ 5555  ドレス 6666  子供服 6666  肌着 このような形で、1行に1カテゴリーが入っていて 1つの商品コードに対しては1~5カテゴリーが入力されている、 といった感じなんです。 それが約13000行あります。

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.1

B列には、「レディース服」「スカート」「カジュアル」の文字が、具体的にどのように入っているのですか? 知りたいのは、区切り記号として、何を使っているか、ということです。 「レディース服 スカート カジュアル」と、スペースなのか、「レディース服、スカート、カジュアル」と「、」なのか、ということが知りたいのですが、もし、区切り記号がそのときそのときで、いろいろだと、かなり難しいかと思います。

mameanna
質問者

お礼

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

mameanna
質問者

補足

説明が不足しており申し訳ございません。 B列の1セルに1つのカテゴリーが入っている状態です。 A列   B列 1234  レディース服 1234  カジュアル 1234  スカート 9999  メンズ服 9999  パンツ 5555  ドレス 6666  子供服 6666  肌着 このような形で、1行に1カテゴリーが入っていて 1つの商品コードに対しては1~5カテゴリーが入力されている、 といった感じなんです。

関連するQ&A