この度は私の質問に目を留めて頂きありがとうございます。
作業については次の通りで 画像の上が作業前、下が作業後の状態です。
A列に商品種類名称番号が商品の数ごとにならんでいます。
B列にはサイズ名、D列にカラー名をそれぞれ並べています。
C列にB列のサイズ名を区別するための番号、E列にD列のカラー名を区別する番号を付けていく作業を現在手作業で行っています。
C列のサイズ番号(記号)、E列のカラー番号(記号)ともに A列にまとめている商品種類ごとに個別のアルファベットと番号をあてていっています。
画像下図の作業結果のように単純にその商品のサイズが3種類ならa,b,c、色種類が5種なら1,2,3,4,5 というように付けています。
商品種類が3000以上、商品数は15000種類を超えるため、関数などで置き換えて短時間で行えないかと模索していますがなかなか思うようにいきません。
置き換える手段がございましたらご教授いただけると幸いです。
もちろんサイズ名部分、カラー名部分と分けてでも結構です。よろしくお願い致します。
関数でもできるとは思いますが、マクロの例です。
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 を選んで実行です。
関数でもできるとは思いますが、マクロの例です。
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 を選んで実行です。
マクロというものへの敷居が高く、頭の隅にはありましたがお教えいただいたもので必要を満たしていただけたのであらためて驚嘆です。
ひじょうに感謝です。
ありがとうございました。
質問なさった内容は,表計算ソフトを使っていると必ず生じるニーズです。
ですから,そのために VLOOKUP という関数が準備され,一般的に使われています。
EXCELの関数の,いちばん基礎の部分だと思って下さい。したがってマクロは必要ありません。
サンプルと使い方:
http://www11.plala.or.jp/koma_Excel/contents3/mame3023/mame302301.html
「得意先を入力すると,それに対応する地区が自動的に入力される。」
「商品名を入力すると,それに対応する金額が自動的に入力される。」
今やりたいことは,
「サイズ名を入力すると,サイズ記号が自動的に入力される。」
「カラー名を入力すると,カラー記号が自動的に入力される。」
というものですよね。
Excelを使う上での必須知識ですので,どうぞお試しを。
私の質物にご回答いただきありがとうございます。
表記がわかりにくく申し訳ございませんでした。実はもっとサイズ名、カラー名はメーカーサイドの表記をこの表に取り入れ、別のソフトで利用するための商品認識用に記号番号を振ってく作業に使っています。ひとつひとつに統一性を今回の番号割り振りにてはじめて行うというところです。
お教えいただきましたVLOOKUP関数はあらためて表内の管理で利用させていただきます。
ありがとうございました。
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 09:45:26ひじょうに感謝です。
ありがとうございました。