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

お世話になります。
表①からリスト①に載っている人だけのデータを数式を使って抽出したいです。
(フィルタを使わないで、極力手作業にならない方法で)
表①は、スタッフ数百名分の全データとして、リスト①は、ある部署のスタッフとします。


表①
氏名 日付 ログイン ログオフ
田中 舞妓 2017/5/16 8:25 17:35
田中 舞妓 2017/5/17 8:18 17:35
田中 舞妓 2017/5/18 8:15 17:35
田中 舞妓 2017/5/19 8:29 17:34
田中 舞妓 2017/5/22 8:16 17:33
三田 建造 2017/5/23 8:18 17:39
三田 建造 2017/5/25 8:29 17:38
三田 建造 2017/5/26 8:02 17:31
三田 建造 2017/5/29 8:24 17:32
三田 建造 2017/5/30 8:22 17:33
牧 重三 2017/5/31 8:29 17:31
牧 重三 2017/6/1 8:17 17:35
牧 重三 2017/6/2 8:18 17:41
牧 重三 2017/6/5 8:19 17:31
牧 重三 2017/6/6 8:18 17:41
長岐 知美 2017/6/7 8:29 17:34
長岐 知美 2017/6/8 8:18 17:36
長岐 知美 2017/6/9 8:15 17:34
長岐 知美 2017/6/12 8:29 17:32
篠田 亜紀 2017/5/21 8:16 17:32
柿田 輝未 2017/5/28 8:18 17:17
荒元 耕平 2017/6/4 8:22 17:32
佐田 容子 2017/6/11 8:21 17:46
藤島 澄人 2017/6/12 8:24 17:59
藤島 澄人 2017/6/13 8:22 17:41
藤島 澄人 2017/6/14 8:29 17:28
藤島 澄人 2017/6/15 8:23 17:30
藤田明則 2017/5/16 8:29 17:34
藤田明則 2017/5/17 8:26 18:15
藤田明則 2017/5/31 15:30 0:36


リスト①
田中 舞妓
牧 重三
藤島 澄人
藤田明則

[完成]
氏名 日付 ログイン ログオフ
田中 舞妓 2017/5/16 8:25 17:35
田中 舞妓 2017/5/17 8:18 17:35
田中 舞妓 2017/5/18 8:15 17:35
田中 舞妓 2017/5/19 8:29 17:34
田中 舞妓 2017/5/22 8:16 17:33
牧 重三 2017/5/31 8:29 17:31
牧 重三 2017/6/1 8:17 17:35
牧 重三 2017/6/2 8:18 17:41
牧 重三 2017/6/5 8:19 17:31
牧 重三 2017/6/6 8:18 17:41
藤島 澄人 2017/6/12 8:24 17:59
藤島 澄人 2017/6/13 8:22 17:41
藤島 澄人 2017/6/14 8:29 17:28
藤島 澄人 2017/6/15 8:23 17:30
藤田明則 2017/5/16 8:29 17:34
藤田明則 2017/5/17 8:26 18:15
藤田明則 2017/5/31 15:30 0:36

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

  • うーん・・・

    早くて正確な方法であれば、数式にはこだわりません。
    ただし、表①は1万行以上あるので、フィルタをかけて一人づつ抜き出していく方法は時間がかかり過ぎます。

      補足日時:2017/07/20 00:19

A 回答 (4件)

こんばんは!



VBAになりますが、一例です。
↓の画像のように元データはSheet1にあり、
Sheet2のA列2行目以降に「リスト」を入力 → C~F列に表示するとします。

標準モジュールにしてください。

Sub Sample1()
Dim i As Long, lastRow As Long, wS As Worksheet
Dim myStr As String, myAry As Variant
Set wS = Worksheets("Sheet2")
lastRow = wS.Cells(Rows.Count, "C").End(xlUp).Row
If lastRow > 1 Then
Range(wS.Cells(2, "C"), wS.Cells(lastRow, "F")).Clear
End If
For i = 2 To wS.Cells(Rows.Count, "A").End(xlUp).Row
myStr = myStr & wS.Cells(i, "A") & ","
Next i
myAry = Split(myStr, ",")
With Worksheets("Sheet1")
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
.Range("A1").AutoFilter field:=1, Criteria1:=Array(myAry), Operator:=xlFilterValues
If .Cells(Rows.Count, "A").End(xlUp).Row > 1 Then
Range(.Cells(2, "A"), .Cells(lastRow, "D")).SpecialCells(xlCellTypeVisible).Copy wS.Range("C2")
End If
.AutoFilterMode = False
End With
End Sub

こんな感じではどうでしょうか?m(_ _)m
「エクセル データ抽出の数式」の回答画像4
    • good
    • 0
この回答へのお礼

フィルタオプションで解決しました。
VBAは私には難しくてわからないですが、丁寧なご回答ありがとうございます。

お礼日時:2017/07/20 23:33

>早くて正確な方法であれば、数式にはこだわりません



フィルタオプションで。
    • good
    • 0

マクロなら簡単に実行できますが、いかがいたしましょうか。



氏名ですが苗字と名前の間に空白がある場合とない場合があります。
以下のようなケースはありますか。
①藤田明則
②藤田 明則
③藤田   明則

表①にの中に上記の①②③のようなデータが混在することがありますか。(空白が無い場合とある場合、空白があるとき1つの場合と2つの場合、又、空白が全角の空白の場合と、半角の空白の場合)
もし、上記の①②③が混在した時、①②③は同じ人として扱うのでしょうか。それとも、異なる人として扱ってもよいのでしょうか。
    • good
    • 0

》 フィルタをかけて一人づつ抜き出していく方法は時間がかかり過ぎます


「フィルタ」には二種類あることを知っていますか?[オートフィルタ」と[フィルタオプションの設定]
此処で仰っている「フィルタ」とは何れの方法ですか?
何れの方法でも、フィルタを掛けたのに「一人づつ抜き出していく」ような馬鹿なことは誰も考えませんよ!
貴方が仰っている「時間がかかり過ぎます」は、具体的に何秒、あるいは、何分以上のことですか?
曖昧な表現は避けてください
    • good
    • 0

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