プロが教える店舗&オフィスのセキュリティ対策術

画像のように,Sheet1にはC列~L列まで商品名があります。
M列以降に名前などのデータが並んでいます。
例えば,名前①の人は商品①だけを購入,名前②の人は①③⑤⑧を購入している。。。。。とします。

次にSheet2は,それぞれの商品の購入者名簿です。
例えば,「商品①」のボタンを押すと,商品①を購入している名前①,名前②,名前⑤の3名のデータを抽出するといった名簿を作成したいのです。

ちなみにSheet1の購入商品は購入商品の個数を表しているのではありません。つまり,ここのセルには「1」が入力されるか,または空白かのどちらかです。
このようなマクロを考えているのですが,知識がないのでさっぱり分かりません。
どうかお願いします。

また,できればデータのない欄は斜線を入れれるようにもしたいです。
例えば,Sheet2の「商品①」の場合は3名しかデータがないので,この表のB7のセルから下の(具体的にはK20まで)部分にはデータがないので,ここには右上がりの斜線が引ければありがたいです。

「Excelで,一覧表シートから必要な名簿」の質問画像

質問者からの補足コメント

  • あっ。
    斜線はなくてもいいです。
    あまり多くのことは理解できないので、とりあえず名簿の作成だけ急ぐのでお願いします。

      補足日時:2017/01/21 10:25
  • うーん・・・

    名前は重複しません。
    複数の行に,同じ名前が出てくることはありません。
    一人で複数の商品を購入することはあります。

    (画像のSheet1のように,購入商品が最大で①~⑩の全商品を購入する人がいたり,逆にまったく購入しないため,どのセルも空白の場合もあったりします。)
    つまり,商品①の購入者は全ての名簿中3名しかいないものの,逆に商品②は購入者が15名いるといったように,名簿の人数は変動します。

      補足日時:2017/01/21 10:37

A 回答 (2件)

こんにちは!



商品数だけコマンドボタンを挿入しているのですね?

画像を拝見すると「姓」・「名」が結合されているように見えるのですが、
それではExcel的にどこまでが「姓」なのか判断できませんので
「姓」はM列・「名」はN列になっているという前提です。

「商品①」のコマンドボタンのオブジェクト名はそのまま「CommandButton1」となっているとします。
とりあえず「商品①」のコードだけ

Private Sub CommandButton1_Click()
Dim i As Long, myEnd As Long, wS As Worksheet
Set wS = Worksheets("Sheet1")
With Range("C4:D20")
.ClearContents
.Borders(xlDiagonalUp).LineStyle = xlNone
End With
For i = 4 To wS.Cells(Rows.Count, "C").End(xlUp).Row
If wS.Cells(i, "C") = 1 Then
'▼ 「姓」「名」の2列しか操作していない//
Cells(Rows.Count, "C").End(xlUp).Offset(1).Resize(, 2).Value = _
wS.Cells(i, "M").Resize(, 2).Value
End If
Next i
myEnd = Range("C3").End(xlDown).Row
If myEnd < 21 Then
Range(Cells(myEnd + 1, "C"), Cells(20, "D")).Borders(xlDiagonalUp).LineStyle = xlContinuous
End If
End Sub

※ 表の詳細が判らないので
 コマンドボタンを配置しているSheetのC・D列の操作しかしていません。m(_ _)m
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
とっても助かりました。

お礼日時:2017/01/22 08:10

熟練の方がたくさんいらっしゃいますから、マクロについては、その方たちにお願いして。


補足説明を願います。
Sheet1について、どのように入力なさるかがわかりませんが、
名前は重複しませんか?
例えば、名前①の人が、
別の行で同じ商品①や別の商品(例えば商品⑤など)を購入したというようなデータはありませんか?
    • good
    • 0
この回答へのお礼

ありがとうございます。
名前は重複しません。

お礼日時:2017/01/21 10:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!