• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルの関数で商品を区別する記号番号をつける方法)

エクセル関数で商品に区別符号をつける方法

tom04の回答

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 簡単なようで結構手間取りました。 VBAになってしまいますが一例です。 ↓の画像のようにB列に表示させたいデータをG列に羅列しておきます。 Sheet2を作業用のSheetとして使用していますので、Sheet2は全く使用していない状態にしておいてください。 Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面に ↓のコードをコピー&ペーストし、Excel画面に戻ってマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample1() 'この行から Dim i As Long, k As Long, endRow As Long, c As Range, r As Range, wS1 As Worksheet Set wS1 = Worksheets("Sheet1") Application.ScreenUpdating = False With wS1 endRow = .Cells(Rows.Count, "A").End(xlUp).Row If endRow > 1 Then .Range("C2").Resize(endRow - 1).ClearContents .Range("E2").Resize(endRow - 1).ClearContents End If For i = 2 To endRow If .Cells(i, "A") <> .Cells(i - 1, "A") Then .Cells(i, "C") = "a" ElseIf .Cells(i, "B") <> .Cells(i - 1, "B") Then Set c = .Range("G:G").Find(what:=.Cells(i - 1, "C"), LookIn:=xlValues, lookat:=xlWhole) .Cells(i, "C") = c.Offset(1) ElseIf .Cells(i, "B") = .Cells(i - 1, "B") Then .Cells(i, "C") = Cells(i - 1, "C") End If Next i End With With Worksheets("Sheet2") wS1.Range("A:A").AdvancedFilter Action:=xlFilterInPlace, unique:=True wS1.Range("A:A").SpecialCells(xlCellTypeVisible).Copy .Range("A1") wS1.ShowAllData For k = 2 To .Cells(Rows.Count, "A").End(xlUp).Row wS1.Range("A1").AutoFilter field:=1, Criteria1:=.Cells(k, "A") wS1.Range("D:D").SpecialCells(xlCellTypeVisible).Copy .Range("B1") endRow = .Cells(Rows.Count, "B").End(xlUp).Row If endRow < 3 Then .Cells(2, "C") = 1 Else .Cells(2, "C") = 1 For i = 3 To endRow Set c = Range(.Cells(2, "B"), .Cells(i - 1, "B")).Find(what:=.Cells(i, "B"), LookIn:=xlValues, lookat:=xlWhole) If Not c Is Nothing Then .Cells(i, "C") = c.Offset(, 1) Else .Cells(i, "C") = WorksheetFunction.Max(.Range("C:C")) + 1 End If Next i End If Set r = wS1.Range("A:A").Find(what:=.Cells(k, "A"), LookIn:=xlValues, lookat:=xlWhole) .Range(.Cells(2, "C"), .Cells(endRow, "C")).Copy r.Offset(, 4).Select Selection.PasteSpecial Paste:=xlPasteValues .Range("C:C").ClearContents Next k .Cells.Clear End With wS1.AutoFilterMode = False wS1.Range("A1").Select Application.ScreenUpdating = True MsgBox "処理完了" End Sub 'この行まで ※ 関数でないのでデータ変更があるたびにマクロを実行する必要があります。 ※ G列が目障りであれば作業用SheetのSheet2にG列のデータを入力しておいても構いませんが、 コードが若干変わってきます。m(_ _)m

fishman55
質問者

お礼

ありがとうございました。 マクロを使用できればと考えてはいたのですが、プログラムという観念があり敷居が高く踏み込めませんでした。 必要な状態を即利用可能な状態で実現できております。 利用環境はExcel 2003 SP3 です。 これを機に一歩ふみこんだエクセルの利用を意識したいと思っております。

関連するQ&A

  • エクセルの関数、お願いします<(_ _)>

    AのシートのE列に数百種類の記号が入力されています。 BのシートのC列に都度、記号を入力した際に、AのシートのE列にその記号があれば「入力済み」と表記されるには、どのような関数をどのように使用すればよろしいでしょうか? 宜しくお願いします。

  • 何種類の商品があるか数える関数

    A,C,D列に商品の製造番号が入っています。中には重複しているものがいくつかあるのですが、E列に全部で何種類の製造番号があるか調べる関数はありますか?

  • ひとつも売れてない商品を抽出する関数!

    お世話になります。 エクセルで関数によって色づけをしたいのですが やり方がわからないのでどなたか教えて頂けないでしょうか。 ----------------- 以下のような列があります。 A列 B列 C列 D列 ID サイズ 在庫数 判定結果 IDは商品番号を示していて、データは以下のようになります。 A列 B列 C列 D列 ID サイズ 在庫数 判定結果 A 70cm 5 A 80cm 4 A 90cm 2 B 110cm 4 B 120cm 4 C 90cm 3 C 100cm 3 C 110cm 3 C 120cm 3 C 130cm 3 上記が示しているのは ・Aという商品はサイズが3サイズあり、在庫数はそれぞれ5,4,2着ずつ。 ・Bという商品はサイズが2サイズあり、在庫数はそれぞれ4,4着ずつ。 ・Cという商品はサイズが5サイズあり、在庫数はそれぞれ3,3,3,3,3着ずつ。 今回抽出したいのはBやCのように、各サイズの数が同一のものです。 つまり、「各サイズの在庫が同一ということは多分1着も売れてない」という 性質の商品を抽出したいわけです。 (※各サイズが等しく売れているものも抽出されますがそこは目視で判断します) 商品によって、サイズ分布が違うので行数が変わってきますし、 仕入れ数も違うため、「この数字と等しいということは売れていない」という 判断も出来ません。 この状況で関数を使ってD列にB商品やC商品のような性質の商品に 色付けをしたいと考えているのですが、適切な関数はありますでしょうか? ご回答、どうぞ宜しくお願いいたします。

  • エクセルで A列に商品名 B列に商品番号 C列に管理者 が入っています

    エクセルで A列に商品名 B列に商品番号 C列に管理者 が入っています。 A B C あ 001 佐藤 い 002 鈴木 う 003 田中 え 004 伊藤 お 005 三木 以下600行くらい続いています。 商品名は重複していません。 D列を空列にしE列に商品名をいくつか並べたときに、 F列とG列に商品番号と管理者を表示させたいのですが、 どの関数を使えばいいのかよくわかりません。 環境はエクセル2003です。

  • エクセル 複数行ある同一商品を1行にまとめるには?

    同一内容が入力された複数行の合計を出す方法を教えてください。     エクセルの表でA列に商品名、B列に色の種類、C列~E列にサイズごとの個数がある、まったく同じ商品が、複数行にランダムに掲載されています。 A列、B列で同一の情報を持つ商品について、C列~E列のサイズごとの合計を出したいのです。 例)商品名、色、サイズ個数(C列:Sサイズ、D列:Mサイズ、E列:Lサイズの順です。) A1:Tシャツ B1:ホワイト C1:5 D1:4 E1:3   A2:Tシャツ B2:ブラック C2:3 D2:5 E2:5 A3: Tシャツ B2:ホワイト C3:3 D3:3 E3:2 A4: Tシャツ B2:ブラック C4:3 D4:2 E4:3 各商品が300行程あり、オートサムではやりきれません。 すべての各商品(A列、B列が一致するもの)を1行ごとにまとめたシートを作成するにはどうしたら良いでしょうか?

  • エクセルの関数

    A列に顧客番号(1~300)、B列に顧客名、C列に都道府県、D列に電話番号、E列にグループ(A or B or C)が記入されている データがあります。 例えば、『C列の都道府県が"東京都"』&『E列のグループが"B"』のデータ全ての『A列の顧客番号』と『B列の顧客名』を一覧で求めたい のですが、どのような関数を使えば良いでしょうか? ちなみに、オートフィルターは使用したくありません。 宜しくお願いします。

  • エクセル 関数を教えて下さい。

    ちょっと複雑なのですが、こういう場合の関数の式はどうすれば良いか解る方がおりましたら教えて頂きたいのですが、宜しくお願い致します。 列AではAまたはBを選択し、列Bでは列AのA,Bそれぞれにa,b,c,d,eのいずれかを選択したときに、列Cに列A・列Bで選択したのもに当てはまる記号・数字を表示させるといった関数なのですが、何度挑戦しても引数が限界を超えている等になり出来ません。 もしかすると、根本的に間違っているかもしれません。ちなみにIFを使っていました。 列A  列B  列C A     a     × A     b     2.3.4 A     c     2.3.4 A     d     1.3.4 A     e     2.3.4 B     a     × B     b     2.3.4.10.11.12 B     c     2.3.4.10.11.12 B     d     1.3.4.9.11.12 B     e     2.3.4 列A・列Bを選択すると、列Cに上記の記号・数字を自動表示させたいです。 以上、宜しくお願い致します。

  • ひとつも売れてない商品を抽出する関数!(改)

    お世話になります。 エクセルで関数によって色づけをしたいのですが やり方がわからないのでどなたか教えて頂けないでしょうか。 ----------------- 以下のような列があります。 A列 B列  C列   D列 ID サイズ 在庫数 判定結果 IDは商品番号を示していて、データは以下のようになります。 A列 B列  C列   D列 ID サイズ 在庫数 判定結果 A  70cm   5 A  80cm   5 A  90cm   0 B  110cm  4 B  120cm  4 C  90cm   3 C  100cm  3 C  110cm  3 C  120cm  3 C  130cm  3 D 50cm 0 D 60cm 0 D 70cm 0 上記が示しているのは ・Aという商品はサイズが3サイズあり、在庫数はそれぞれ5,5,0着ずつ。 ・Bという商品はサイズが2サイズあり、在庫数はそれぞれ4,4着ずつ。 ・Cという商品はサイズが5サイズあり、在庫数はそれぞれ3,3,3,3,3着ずつ。 ・Dという商品はサイズが3サイズあり、在庫数はどれも0着で売切れ。 今回まず抽出したいのはBやCのように、各サイズの数が同一のものです。 つまり、「各サイズの在庫が同一ということは多分1着も売れてない」という 性質の商品を抽出したいわけです。 (※各サイズが等しく売れているものも抽出されますがそこは目視で判断します) 商品によって、サイズ分布が違うので行数が変わってきますし、 仕入れ数も違うため、「この数字と等しいということは売れていない」という 判断も出来ません。 この状況で関数を使ってD列にB商品やC商品のような性質の商品に 色付けをしたいと考えているのですが、適切な関数はありますでしょうか? ※A商品は多分仕入れが5着ずつで90cmのサイズだけ売れています。  残りのサイズは1着も売れていないということになりますが、  希望しているのはどのサイズも1着も売れていないというものなので  A商品は抽出されてほしくありません。  (この場合も各サイズが同じ数売れている時に抽出されるのはOKです。   最後に目視で除外します。) B,C商品には、同じID内の一番上の行のD列に「売れてない」と表示されてほしいです。 最後に、D商品は、逆に全て売り切れているという商品ですので  「完売」という色を付けたいです。 これも同じID内の一番上の行のD列に「完売」と表示されてほしいです。 ご回答、どうぞ宜しくお願いいたします。

  • エクセルで商品を振り分ける方法ありますか?

    すみません、エクセル関数を使ってシート別に商品を一括して振り分けることはできますでしょうか? 内容としては、以下のように商品名が単語になっていない場合に、 桃やみかんといったキーワードを抽出して振り分ける形になります。 また、VBAでは知識がありませんので、後々いろいろな形に変更できる 関数で行いたいのですが、ご教示頂けませんでしょうか? シート1:商品一覧(商品データ)  A列(商品名)      B列(商品コード)    C列(金額)  新鮮な桃20個セット    14568        ¥3,450  美味しいみかん1ケース  23456        ¥2,980  山形直送!さくらんぼ   87666        ¥4,500    ・    ・    ・ シート2:桃(”桃”が入っている場合に振り分けられるようにしたいです。)  A列(商品名)      B列(商品コード)    C列(金額)  新鮮な桃20個セット    14568        ¥3,450    ・    ・    ・ シート3:みかん(”みかん”が入っている場合に振り分けられるようにしたいです。)  A列(商品名)      B列(商品コード)    C列(金額)  美味しいみかん1ケース  23456        ¥2,980    ・    ・    ・ シート4:さくらんぼ・・・・・ といったようにしたいのですが、ご教示いただけませでしょうか? シートは予め必要分だけ作っておきます。 何卒宜しくお願い申し上げます。

  • エクセル関数

    エクセル関数を教えてください。 下記のシフト表のようなものを作成しているのですが、 【Sheet1】    A列    B列  C列   D列 ・・・・  1 氏名    4/8   4/9   4/10・・・・ 2 勤務者名  ●   △    ■ B列以降は連続した日付で 2行目は出勤日に記号を入力します。 記号は仕事種類によって違うので、種類はいろいろあります。 ちなみに、【Sheet1】のひな形は変更不可です。 この表を元に【Sheet2】に勤務者名を入力すると、 最初に出勤した日と、最後に出勤した日を表示させたいのです。 IFやVLOOK関数を使うのかな?と思いいろいろやってみたのですが、 うまくできませんでした。。。 ご協力よろしくお願いします。