• 締切済み

No.、氏名は一行ずつ、持ち物は1名に対して0~10程度の一覧がありま

No.、氏名は一行ずつ、持ち物は1名に対して0~10程度の一覧があります。 1人1人は1行ずつあいております。 個人別の持ち物リストを作成したいのですが(日々50人程度)、フィルタだと個人の1行目の 持ち物しか抽出されません。 画像右側のようなリストには、VBAで番号から氏名持ち物を抽出させると いいのでしょうか??(No.を入力すると、氏名・持ち物の最後の行まで代入とか) マクロでもできませんでした。。 No.と氏名をそれぞれの行に記入するのは運営上(複数人が入力)難しいです。 とても困っております。。 よろしくお願いいたします。

みんなの回答

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.5

回答No4です。大変失礼をいたしました。D2セルには次の式を入力して下方にオートフィルドラッグしてください。 =IF(AND(A2<>"",COUNTIF(E:E,A2)>0),MAX(D$1:D1)+1,IF(AND(C1<>"",C2<>"",D1<>""),MAX(D$1:D1)+1,"")) 他の操作法はNo4のとおりです。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.4

D列に作業列を作って対応するのがよいでしょう。 D2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(AND(A2<>"",COUNTIF(E:E,A2)>0),MAX(D$1:D1)+1,IF(C2="","",MAX(D$1:D1)+1)) E2セルから下の行には抽出して表示させたいNoを例えば、E2セルに1、E3セルに3のように入力します。 F列からH列に抽出した表を表示させるとしてF2セルには次の式を入力してH2セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(ROW(A1)>MAX($D:$D),"",IF(INDEX($A:$C,MATCH(ROW(A1),$D:$D,0),COLUMN(A1))=0,"",INDEX($A:$C,MATCH(ROW(A1),$D:$D,0),COLUMN(A1)))) これでE列に番号を入力すれば関連する表だけがFからH列に表示されることになります。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

EXCELの表としての使い方に、反している。あえて言えば、ワード的なやり方になっている。 人間は質問のようなのが理解しやすいが、エクセルは ・行単位で(完結する)、 ・その行にキーになる情報がある ・中間に空白行を置かない 「リスト」とか「テーブル」(それぞれEXCELの熟語で、一般的使用法に非ず)と言うのがそういうもので そのようなデータの整理の仕方がEXCELに適している。 ーー 本件のシートを別シートコピーし 空白行を省き、氏名の下には氏名を入れて、フォントを白色にするVBAを書いておくから、そちらのほうで以後の応用を考えては。 例データ(--は空白セル。左詰め表示されるのを防止の対策) 氏名 持ち物 山本 靴 ーー かばん 藤田 鉛筆 木村 消しゴム ーー 筆 大野 ノート ーー 帽子 ーーーー 標準モジュールに Sub test01() '---空白行削除 d = Range("B65536").End(xlUp).Row For i = d To 2 Step -1 If Cells(i, "B") = "" Then Rows(i).Delete Next i '----氏名空白セルを補充 d = Range("B65536").End(xlUp).Row m = Cells(2, "A") For i = 3 To d If Cells(i, "A") = "" Then '空白であれば Cells(i, "A") = m '上と同じ氏名セット Cells(i, "A").Font.Color = vbWhite '文字色白色 Else m = Cells(i, "A") '氏名を覚えておく End If Next i End Sub 実行結果 見かけ 氏名 持ち物 山本 靴    かばん 藤田 鉛筆 木村 消しゴム    筆 大野 ノート    帽子 ーーーーー これでフィルタなど出来る。大野でフィルタすると ノートと帽子の行がでる。

  • mar00
  • ベストアンサー率36% (158/430)
回答No.2

Sub Macro1() KENSAKU = Application.InputBox("No.または氏名を入力して下さい。") On Error GoTo LINE: Columns("A:B").Find(What:=KENSAKU).Activate For i = ActiveCell.Row To ActiveCell.Row + 99 If IsEmpty(Cells(i, 3)) Then Exit For Else Range(Cells(i, 1), Cells(i, 3)).Copy GYOU = Cells(Rows.Count, 8).End(xlUp).Row + 1 Range("F" & GYOU).PasteSpecial End If Next i Application.CutCopyMode = False Range("A1").Select Exit Sub LINE: MsgBox (" 該当者なし。") End Sub No.または氏名で検索してコピーするようになっています。 ボタンを作って、マクロを登録すればよいのではないかと思います。

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.1

氏名の右に行を追加して、2行目に=IF(B2="",C1,B1)をドラッグコピーして、値のみ貼り付け後に、持ち物をフィルタしては。

acochaco
質問者

補足

こんにちは。 ご回答ありがとうございます。 今やってみたのですが、持ち物をフィルタするというのは 意味がわからないのですが、 すみません教えていただけますでしょうか? 行を挿入せずにできる方法があればうれしいです。

関連するQ&A