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

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

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

お世話になります。 同じような質問が今までもあったかもしれないのですが、 何と検索していいか分からず思ったような検索結果が 得られなかったので質問させていただきます。 エクセル2016を使用しています。 A列に商品コード B列に商品コードに対するカテゴリー(レディース服やスカート、カジュアルといったカテゴリーです)が一つの商品コードに対して複数入力されています。 (1つ~5つでバラバラです) それをA列に商品コード、B以降の列にカテゴリーが入力されている表にしたいのですが 可能でしょうか?(商品コードに対してのカテゴリーを横並びにしたいです) A列       B列     C列   D列 商品コード1234 レディース服 スカート カジュアル 可能な場合どのようにしたらいいかお教えいただけないでしょうか? よろしくお願いいたします。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答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/7940)
回答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/17068)
回答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% (1011/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% (363/1775)
回答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

  • Excel2000で2つの列を見比べるマクロ

    例えば、先月に売れたものの一覧表のシートと、取扱商品の一覧表シートがあるとします。 どちらも商品コードが先頭にあるので、 その売れたものの商品コードと一覧表の商品コードとをコピーしてきて 別のシートに貼り付けます。 売れたものの商品コードがA列、取扱商品の商品コードがB列。 当然、B列には、A列に無い商品コードがあります。 二つの列を見比べて、A列に足りないものがあれば A列の末尾にコピーをするというようなことはできないでしょうか? 末尾にコピーが無理ならば、A列に無いものだけをC列にコピーするようなことはできないでしょうか? 宜しくお願いいたします。

  • 【Excel】VLOOKUP関数について

    Excel2003を使用しています。 B列にコードNo.、D列に会社名が入力されている表(1)があります。 表(1)とは別のシートで、B列にコードNo.を入力すると、D列に会社名が表示されるように、VLOOKUP関数で検索範囲を表(1)としてD列に数式を入力しています。 これを逆に、D列に会社名を入力したら、B列にコードNo.が表示されるようにしたいのですが、B列に数式を入力する際、表(1)はこのまま利用できるのでしょうか?

  • Exel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

    部品表というブックがあります A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。 A列     B列     C列       商品名  商品番号  コード モータ  U-1325-L   ホルダ  R-134256 また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。 やりたいことは 部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。 部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。 自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが… Sub 別ブックから貼り付ける()   Dim 検索する As Long Windows("部品表.xls").Activate 検索する = cells(i,2).Value Windows("コード一覧表.xls").Activate ActiveWindow.SmallScroll Down:=-3 Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。 基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。 どうぞよろしくお願いします。

  • 複数条件でcountif以外を使う方法

    色々質問を探して考えてみたのですが、どうしてもわからないので質問させてください。 果物にそれぞれ商品コードがあり、 A列に果物の名前を入力すると、B列に商品コードが入力されるような式をB列に入れています。 【表】     A          B 1   品名       商品コード     2 みかんを購入     0010   3 りんごをもらう     0020 4 ぶどうを捨てる     0030 【式】 B列に入力 =If(countif(A:A,"*みかん*",0010),if(countif(A:A,"*りんご*",0020),countif(A:A,"*ぶどう*",0030,""))) 検索値が文字の上、文章の中から拾っているため上記の関数を使っていたのですが、 最近果物の数とそれに対する商品コードが増えたため、上記の式では多すぎて入力できません。 お手数ですが、どなたかお分かりになる方ご回答お願いします。

  • Excel2007 関数 表内の検索

    いつもお世話になります。 Excel2007で作成した表内で A列 C列 E列 G列に年月日 B列 D列 F列 H列に商品名が入っています。 年月日と商品名が交互に10列くらいあるんですが、 別シートのA列の年月日から隣の列商品名を検索してB列に表示したいのですが 何かいい方法はありませんでしょうか できれば関数でしたいのですが・・・・ 別シートの表は A列年月日(手入力で表示)、B列には検索で表示したい商品名の2列のみの表です。

  • エクセルシートで商品管理表を作成したいです。シート1のA列には商品名・

    エクセルシートで商品管理表を作成したいです。シート1のA列には商品名・B列にはコード番号が入力されています。そのシートを基に簡単に(画像のように)品名とコードの塊を表示させたいのですが、どのような方法がありますか?教えて下さい!!!

  • excel関数

    excelで作成した表のなかで a列には各コードが入力 b列は文字列 c列は数字 別にシートを作りコード順に 最小値と最大値、平均を求めたい b列に文字が入っていないデータを探して、別シートに入力したa列コードと一致するデータをc列から探し(複数データあります)その中で更に最小値と最大値、平均を求めたいのですが 関数が分かりません。 教えていただけば助かります。 よろしくお願いします。

  • Exel VBA 別シートから該当データを取得する

    お世話になります。 エクセルVBAで質問です。 以下の日付表というシートがあります A列に日付、B列に商品番号が入力してあります。C列のコードは未入力です。 A列     B列     C列       日付    対象商品番号  コード 2020/6/1  U-1325-L   2020/6/2  R-134256 2020/6/3  L-456632 ・ ・ ・ 2020/6/30  W-724789 また、一覧表という別のシートには、A列に商品番号と、B列からコードが何百件も入力されています。 (1行目に限っては、A1だけ商品番号の項目でB列からは日付です) A列     B列     C列     D列  AE列 商品番号  2020/6/1  2020/6/2  2020/6/3・・・・ 2020/6/30 R-134256  123123   456456   741741 ・・・・ 753753 U-1325-L  789879   963963   852852 ・・・・ 951951 ・ ・ ・ やりたいことは 日付表のC列のコード欄に、一覧表から商品番号と日付が一致するコードを貼り付けしたいのです。 現状、目視で全入力しているので、マクロで一度に処理を希望します。 または、マッチしたら一覧表側のコードセルにマークつける方法でもかまいません。 と、言ってみたものの、Google検索しても、どうやって調べればいいのかが、わかりませんでした。 マクロの基本事項は本で学びましたが、条件が複数になってくるとよく理解できません。 どうぞよろしくお願いします。

  • EXCEL2000:上書きするVBAのコードを教えてください。

    EXCEL2000のマクロを使用して以下のようなことをやりたいと考えています。 VBAに記載するコードを教えていただけますでしょうか。 ●シート構成 1.データシート A列:各データを識別するコード(3桁で000、001等) B列:氏名 C列:年齢 D列:性別 2.入力シート A列:各データを識別するコード(3桁で000、001等) B列:氏名 C列:年齢 ●やりたいこと 1.「入力シート」に識別コードをふり、データを入力しています。 2.そのデータとは別に、「データシート」にもデータを入力しています。 3.「データシート」に存在するデータに関しては、入力シート上のA列:識別コードと同じデータのB列:氏名とC列:年齢を、「入力シート」上のそれぞれの列に上書きします。 4.「データシート」に存在しないデータに関しては、「入力シート」上に存在するデータをそのまま残します。 マクロを作動させると、上記一連の作業が完了するようにできればと考えています。 まとめますと、「データシート」上にデータが存在すればそれを「入力シート」上に表示し、存在しなければ「入力シート」のデータをそのまま表示するというような仕組みにできればと考えています。 ご回答よろしくお願い致します。

  • 関数でなんとかなりませんか?(EXCEL)

    マクロや関数に関してはあまり知識がありません。 そこでお教えいただきたいことがあり、質問させていただきました。 まず、あるワークシートに以下のような表があります。 A列|B列 a   1 b   1 c   1 d   2 e   2 この表を新しいワークシート(ワークシート名:並べ替え)以下のように並べ替えたいと思っています。 A列|B列|C列|D列 1   a   b   c 2   d   e 要するに、B列の値を認識して値が同じものを1行目に横並びにしたいのです。 関数やマクロでなんとかなりませんか? 膨大なデータがあるので手作業でやるととてもしんどいですし、間違いがでやすくなり困っています。 お願いいたします。

専門家に質問してみよう