• 締切済み

Excelで名簿の重複を検索する方法

よろしくお願いします。 Excelで名簿を作りました。 その名簿を使って、次のようなことをしたいのです。 A列には、全員の名前が入れてあります。 B列には、提出物を出した人の名前が入っています。 このA列とB列を見比べて、提出物を出していない人の名前だけをC列に反映させたいと思います。 そのような関数をご存知の方はいませんでしょうか??? よろしくお願いします。

みんなの回答

回答No.8

No.1さんのお答えがシンプルかつ素直で、個人的には好きです。私のようなへそ曲がりだと、こんな式も書きます(笑) =if(iserror(vlookup(a1,B:B,1,)),a1,"")

mayusachimi
質問者

お礼

返事が遅くなってすみませんでした。 いろいろなやり方があるものなんですね。 勉強になります。 ありがとうございました。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.7

A2セル以下(A100セルまでの範囲内)に名前、B1セル以下(B100セルまでの範囲内)に抽出対象外の名前が記載されているなら、以下の式を入力して下方向にオートフィルコピーしてください。 =INDEX(A:A,SMALL(INDEX(COUNTIF($B$1:$B$100,$A$1:$A$100)*1000+ROW($A$1:$A$100),),ROW(A1)))&""

mayusachimi
質問者

お礼

返事が遅くなってすみませんでした。 マクロを使わなくてもできるんですね。 一度やってみます。ありがとうございました。

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

こんにちは! 横からお邪魔しますt。 VBAでの一例です。 ↓の画像のようにデータは2行目からあるとします。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim i, k As Long k = Cells(Rows.Count, 3).End(xlUp).Row If k > 1 Then Range(Cells(2, 3), Cells(k, 3)).ClearContents End If For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row If WorksheetFunction.CountIf(Columns(2), Cells(i, 1)) = 0 Then Cells(Rows.Count, 3).End(xlUp).Offset(1) = Cells(i, 1) End If Next i End Sub 'この行まで お望みの方法でなかったらごめんなさいね。m(_ _)m

mayusachimi
質問者

お礼

返事が遅くなり、すみませんでした。 画像まで貼り付けていただき、とても分かりやすいです。ありがとうございました。 一度、やってみます。

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

回答No3です。回答3は無視してください。 作業列を使って対応する方法です。 A列やB列には2行目から下方にデータが有るとします。 D2セルには次の式を入力して下方にドラッグコピーします。 =IF(OR(AND(B2<>"",COUNTIF(A:A,B2)=0),AND(A2<>"",B2="")),MAX(D$1:D1)+1,"") その後にC2セルには次の式を入力して下方にドラッグコピーします。 =IF(ROW(A1)>MAX(D:D),"",INDEX(A:A,MATCH(ROW(A1),D:D,0))) なお、D列が目障りでしたらD列を選択して右クリックし「非表示」を選択すればよいでしょう。

mayusachimi
質問者

お礼

何度も教えていただき、ありがとうございます。 わざわざ修正までしていただき、感謝しております。

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

A列やB列ではデータが2行目から下方にあるとしたらC2セルには次の式を入力し、式を確定する段階でCtrl+Shiftキーを押しながらEnterキーを押します。その後にC2の式を下方にドラッグコピーします。 =IF(ROW(A1)>COUNTA(B$2:B$1000),"",IF(COUNTIF(A$2:A$1000,B$2:B$1000)=0,"",INDEX(A$2:A$1000,SMALL(IF(COUNTIF(A$2:A$1000,B$2:B$1000)>0,ROW(A$2:A$1000),""),ROW(A1)))))

mayusachimi
質問者

お礼

お礼が遅くなってしまい、申し訳ありませんでした。 関数でもいけるんですか??? 一度やってみます。 ありがとうございました。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

関数では厳しいと思うのでマクロ(VBA)例です。 シートの1行目は見出し行とします。 (1)対象データシートタブ上で右クリック→コードの表示→サンプルコードの貼り付け→シート上でAlt+F8キー押下→sample実行 Sub sample() Dim i As Long, wk As String Set Db = CreateObject("Scripting.Dictionary") For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row Db(Cells(i, "A").Value) = 1 Next For i = 1 To Cells(Rows.Count, "B").End(xlUp).Row wk = Cells(i, "B") If Db.Exists(wk) Then Db.Remove (wk) Next list = Db.Keys For i = LBound(list) To UBound(list) Cells(2, "C").Offset(i) = list(i) Next Set Db = NothingEnd Sub

mayusachimi
質問者

お礼

返事が遅くなってすみません。 やはり、関数では無理なんですか・・・。 マクロは使ったことがないので、少しずつ勉強していこうとは思っているのですが、敷居が高くて・・・。 一度、やってみます。ありがとうございました。

  • kybo
  • ベストアンサー率53% (349/647)
回答No.1

C1に以下の様に入れ、下へコピーすれば、A列にあって、B列にないものが出ます。 =IF(COUNTIF(B:B,A1)=1,"",A1)

mayusachimi
質問者

お礼

返事が遅くなってすいません。 ご回答ありがとうございました。 コピーさせていただきましたが、自分が思っていたこととは、ちょっと違うような・・・。 しかし、勉強になりました。ありがとうございました。

関連するQ&A