1382531158 エクセルの関数を使って商品のサイズ、色にそれぞれ区別する記号番号を付けていくのに苦労しています。

この度は私の質問に目を留めて頂きありがとうございます。
作業については次の通りで 画像の上が作業前、下が作業後の状態です。

A列に商品種類名称番号が商品の数ごとにならんでいます。
B列にはサイズ名、D列にカラー名をそれぞれ並べています。
C列にB列のサイズ名を区別するための番号、E列にD列のカラー名を区別する番号を付けていく作業を現在手作業で行っています。

C列のサイズ番号(記号)、E列のカラー番号(記号)ともに A列にまとめている商品種類ごとに個別のアルファベットと番号をあてていっています。
画像下図の作業結果のように単純にその商品のサイズが3種類ならa,b,c、色種類が5種なら1,2,3,4,5 というように付けています。

商品種類が3000以上、商品数は15000種類を超えるため、関数などで置き換えて短時間で行えないかと模索していますがなかなか思うようにいきません。
置き換える手段がございましたらご教授いただけると幸いです。

もちろんサイズ名部分、カラー名部分と分けてでも結構です。よろしくお願い致します。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/10/25 09:56:51

ベストアンサー

id:Mook No.1

回答回数1314ベストアンサー獲得回数393

関数でもできるとは思いますが、マクロの例です。

Sub Sample()
    Dim dicSize
    Set dicSize = CreateObject("Scripting.Dictionary")

    Dim dicColor
    Set dicColor = CreateObject("Scripting.Dictionary")
    
    Dim r As Long
    Dim product As String
    For r = 2 To Cells(Rows.Count, "A").End(xlUp).Row
        If Cells(r, "A").Value <> product Then
            dicSize.RemoveAll
            dicColor.RemoveAll
            product = Cells(r, "A").Value
        End If
        
        If dicSize.Exists(Cells(r, "B").Value) = False Then dicSize(Cells(r, "B").Value) = Chr(97 + dicSize.Count)
        Cells(r, "C").Value = dicSize(Cells(r, "B").Value)
        
        If dicColor.Exists(Cells(r, "D").Value) = False Then dicColor(Cells(r, "D").Value) = dicColor.Count + 1
        Cells(r, "E").Value = dicColor(Cells(r, "D").Value)
    Next
End Sub

ALT+F11 で開いたウィンドウで、挿入⇒標準モジュールを選び
そこへ上記コードをコピーしウィンドウを閉じます。

EXCELに戻って ALT+F8 で Sample を選んで実行です。

id:hatarakuojisan2011

マクロというものへの敷居が高く、頭の隅にはありましたがお教えいただいたもので必要を満たしていただけたのであらためて驚嘆です。
ひじょうに感謝です。
ありがとうございました。

2013/10/25 09:45:26

その他の回答1件)

id:Mook No.1

回答回数1314ベストアンサー獲得回数393ここでベストアンサー

関数でもできるとは思いますが、マクロの例です。

Sub Sample()
    Dim dicSize
    Set dicSize = CreateObject("Scripting.Dictionary")

    Dim dicColor
    Set dicColor = CreateObject("Scripting.Dictionary")
    
    Dim r As Long
    Dim product As String
    For r = 2 To Cells(Rows.Count, "A").End(xlUp).Row
        If Cells(r, "A").Value <> product Then
            dicSize.RemoveAll
            dicColor.RemoveAll
            product = Cells(r, "A").Value
        End If
        
        If dicSize.Exists(Cells(r, "B").Value) = False Then dicSize(Cells(r, "B").Value) = Chr(97 + dicSize.Count)
        Cells(r, "C").Value = dicSize(Cells(r, "B").Value)
        
        If dicColor.Exists(Cells(r, "D").Value) = False Then dicColor(Cells(r, "D").Value) = dicColor.Count + 1
        Cells(r, "E").Value = dicColor(Cells(r, "D").Value)
    Next
End Sub

ALT+F11 で開いたウィンドウで、挿入⇒標準モジュールを選び
そこへ上記コードをコピーしウィンドウを閉じます。

EXCELに戻って ALT+F8 で Sample を選んで実行です。

id:hatarakuojisan2011

マクロというものへの敷居が高く、頭の隅にはありましたがお教えいただいたもので必要を満たしていただけたのであらためて驚嘆です。
ひじょうに感謝です。
ありがとうございました。

2013/10/25 09:45:26
id:language_and_engineering No.2

回答回数170ベストアンサー獲得回数63

質問なさった内容は,表計算ソフトを使っていると必ず生じるニーズです。

ですから,そのために VLOOKUP という関数が準備され,一般的に使われています。

EXCELの関数の,いちばん基礎の部分だと思って下さい。したがってマクロは必要ありません。


サンプルと使い方:
http://www11.plala.or.jp/koma_Excel/contents3/mame3023/mame302301.html
「得意先を入力すると,それに対応する地区が自動的に入力される。」
「商品名を入力すると,それに対応する金額が自動的に入力される。」


今やりたいことは,
「サイズ名を入力すると,サイズ記号が自動的に入力される。」
「カラー名を入力すると,カラー記号が自動的に入力される。」
というものですよね。

Excelを使う上での必須知識ですので,どうぞお試しを。

他1件のコメントを見る
id:hatarakuojisan2011

私の質物にご回答いただきありがとうございます。
表記がわかりにくく申し訳ございませんでした。実はもっとサイズ名、カラー名はメーカーサイドの表記をこの表に取り入れ、別のソフトで利用するための商品認識用に記号番号を振ってく作業に使っています。ひとつひとつに統一性を今回の番号割り振りにてはじめて行うというところです。
お教えいただきましたVLOOKUP関数はあらためて表内の管理で利用させていただきます。
ありがとうございました。

2013/10/25 09:52:23
id:language_and_engineering

S,M,Lなどではなく,実際にはもっと複雑で,メーカーごとの表記を使う必要がある
という事でしょうか。シンプルなルールにはできないのですね。
メーカ別・なおかつ商品別に表記が異なるとすると
手作業が多くなる可能性もありますが,頑張ってください。
回答1さんのマクロで必要が満たせたならよかったです。


※VLOOKUPの参考ページ

Excel表で,VLOOKUP関数に複数条件を指定したいケースの対処法
http://d.hatena.ne.jp/TipsMemo+computer-technology/20131024/p1
>この1つの条件なら,必ずこの値。
>というふうに,「辞書式」に対処できるような場合であれば,どんどんVLOOKUPを使うべきだ。
>例えば,「北海道なら1」とか。
>だから,このVLOOKUP関数を使えるような「シンプルなルール」を作ることが,表作成の上で重要になる。
>こういう「シンプル化」を試みないと,表の作成は複雑になる。
>だが,VLOOKUP関数をどうしても適用できないケースが実際に存在する。

2013/10/25 10:07:28
  • id:windofjuly
    うぃんど 2013/10/24 07:07:22
    >サイズが3種類ならa,b,c、色種類が5種なら1,2,3,4,5 というように付けています。

    パンツのMサイズはbなのに、TシャツのMサイズはaなんて…、
    わかりづらい管理方法は止めに出来ませんか?

    商品種別が変わってもSはaでMはb…、
    白は1で黒は2…、といった具合に固定することをお勧めしますが、
    できないのでしょうか?

    無理ならIFとMATCHとINDIRECTとMAXあたりを組み合わせて引き出すことになりますが、
    今の仕様のままワークシート関数での処理を行うと、
    データのコピペで簡単に関係性が崩れておかしくなったりもします。

    固定に出来れば定番のVLOOKUP関数1つで出来るようにもなりますが、
    現状のままではマクロを定期的に動かすという対応になるでしょう。

    目先の仕事に囚われず、今後の事も考えて、記号の振り方を考えてみて下さい。
  • id:hatarakuojisan2011
    うぃんど様

    ご指摘ありがとうございます。

    表記がわかりにくく申し訳ございませんでした。
    lang_and_engine様のところにも書かせていただきましたが、実はもっとサイズ名、カラー名はメーカーサイドの表記をこの表に取り入れ、別のソフトで利用するための商品認識用に記号番号を振ってく作業に使っています。ひとつひとつに統一性を今回の番号割り振りにてはじめて行うというところです。
    >無理ならIFとMATCHとINDIRECTとMAXあたりを組み合わせて引き出す・・
    という方法も考えたいと思っております。
    ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません