• 締切済み

EXCELで条件に合った行のデータを抜き出して、重複も削除

excelに関する質問です  | A | B | 1|001|斉藤| -+--+------ 2|001|渡辺| -+--+------ 3|001|田中| -+--+------ 4|001|斉藤| -+--+------ 5|002|飯田| -+--+------ 6|002|矢田| -+--+------ 7|002|飯田| -+--+------ 8|001|渡辺| -+--+------ 9|001|田中| 10| 001 | 斉藤 11|   . | 渡辺 12|   . | 田中 A1:B9にデータが入っています。 A10に番号「001」を入れるとB10:B12に その番号のデータを検索してきて入るように 関数を利用したいのですが、上手くいきません (A10に番号「002」を入れると飯田、矢田のデータが表示される) MATCH関数とindirect関数、index関数などを使い、検索結果が重複して表示されるようには出来たのですが やり方を教えて下さい、お願いします。

みんなの回答

  • NoBi18
  • ベストアンサー率53% (7/13)
回答No.5

似たようなテクニックを業務で多用しています。 補助セルをデータの両サイドに作ります。 タイトル行も作ります。元データと抽出行の間にも、空白行を入れておきます。イメージは下のようになります。  |A| B | C | D --+-+---+----+------ 1|0 No 氏名 No+氏名 2|1 001 斉藤 001斉藤 3|2 001 渡辺 001渡辺 4|3 001 田中 001田中 5|3 001 斉藤 001斉藤 6|3 002 飯田 002飯田 7|3 002 矢田 002矢田 8|3 002 飯田 002飯田 9|3 001 渡辺 001渡辺 10|3 001 田中 001田中 11| 12|1 001 斉藤 13|2   渡辺 14|3   田中 15|4   #N/A 各セル範囲(の左上のセル)には以下の数式が入ります。数式を記さないところは単なる文字や数字です。 【D2:D10】=$B2&$C2 【A2:A10】=A1+($B2=$B$12)*ISNA(VLOOKUP($D2,$D$1:$D1,1,FALSE))*1 【C12:C15】=VLOOKUP($A12,$A$2:$C$10,3,FALSE) まず、【D2:D10】にNoと氏名を合体した文字列を作ります。 【A2:A10】が肝です。条件に合致するデータを数え上げています。 ($B2=$B$12)…NoがB12のセル(上の例では001)と等しい時にTrue(=1) ISNA(VLOOKUP($D2,$D$1:$D1,1,FALSE))…Noと氏名が同じ組合せが1つ上の行までに既出でない時にTrue (例えば、5行目の001 斉藤さんは2行目で既出なのでFalse) その2つを掛け算した部分(=式のA1+を抜かした部分)は、上記2つの条件に当てはまる時(=抽出対象である時)に1になります。A1+をつけることにより、単なる0と1ではなく、その累計を取っています。 ですので、1行目のタイトル(特に【A1】の0)は飾りではなく、必要不可欠です。 最後に、【C12:C15】で条件にあったデータを取ってきます。単なるVLOOKUPなので、データがなければ#N/Aが表示されます。 ちなみに、ISNA関数を取り除くと、udagawaさんがお作りになった関数と同じ結果になると思います。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

#3です。 #もう、ユーザー定義関数のほうが楽だと思います。 以下は、配列数式より、マシかなっていうレベルのものです。あまり、計算スピードは速くありません。 ひさびさに、Dictionary オブジェクトを使ってみました。 '標準モジュール設定 '------------------------------------------------------------ Function FindValues(findtxt As String, myArea As Range, indx As Long) As String 'Dictionary を使った、重複を省く検索, ' findtxt 検索文字列, myArea 2列の範囲, indx は、検索後のデータの序数  Dim objDic As Object  Dim dicAry As Variant  Dim outAry As Variant  Dim i As Long  Dim j As Long  Dim c As Variant  Set objDic = CreateObject("Scripting.Dictionary")  i = 1  For Each c In myArea.Columns(1).Cells   On Error Resume Next   objDic.Add c.Value & "," & c.Offset(, 1).Value, i   If Err.Number = 0 Then    i = i + 1   Else    Err.Clear   End If  Next  dicAry = objDic.keys   outAry = Filter(dicAry, findtxt & ",")  FindValues = Mid(outAry(indx - 1), InStr(outAry(indx - 1), ",") + 1) End Function '------------------------------------------------------------ ワークシートには以下のように、一般の関数と同じように入れます。 B10: フィルダウン・コピー =FindValues($A$10,$A$1:$B$9,ROW(A1))

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 重複データがあるわけですよね。 まず、最初に、それを排除するということから、検索をするというのは、かなり負担が大きいような気がします。最初に、重複を、[フィルタオプションの設定]コマンドで排除というわけにはいかないのでしょうか? >MATCH関数とindirect関数、index関数などを使い、検索結果が重複して表示されるようには出来たのですが それなら、そのまま当てはめられるはずです。 そうでないなら、補助セルを使わないと、たぶん、ネストの制限に引っかかるような気がします。 補助セル D1:(検索ヒット数) =SUM((IF(MATCH($A$1:$A$9&$B$1:$B$9,$A$1:$A$9&$B$1:$B$9,0)=ROW($A$1:$A$9),$A$1:$A$9,"")=$A$10)*1) 要『配列の確定』 B10: =IF($D$1<ROW(A1),"",INDEX($B$1:$B$9,SMALL((IF(MATCH($A$1:$A$9&$B$1:$B$9,$A$1:$A$9&$B$1:$B$9,0)=ROW($A$1:$A$9),$A$1:$A$9,"")=$A$10)*ROW($A$1:$A$9),ROWS($A$1:$A$9)-$D$1+ROW(A1)),1)) 要『配列の確定』 ※『配列の確定』 一旦、数式のところで、F2を押して、再度、SHIFT キーとCTRL キーを押しながら、ENTER を押すと、式が実体化して、値が出てきます。 このレベルになると、もう、ユーザー定義関数のほうが楽だと思います。

noname#204879
noname#204879
回答No.2

》 関数を利用したいのですが、… 私なら、こういうときのためにある[フィルタオプションの設定]を使うけど、面倒な関数に固執する理由は何ですか? 》 MATCH関数とindirect関数、index関数などを使い、 》 検索結果が重複して表示されるようには出来たので 》 すが… ほほ~。どのように出来たのですか?出来るだけそれを利用したもので考えてみたいです。

  • qyb
  • ベストアンサー率15% (69/450)
回答No.1

  先ず、002と入力した時に「飯田」か「矢田」を区別するルールを作りましょう。  

関連するQ&A

  • データの重複を求める関数

    こんにちは。パソコン教室に通う主婦です。エクセルはなかなか難しいです。次の質問教えてください。 Sheet1、2の2つのデータから重複したデータ検索する関数を教えてください。 重複していたら1、そうでないと0、今後、リストのレコードに増減があっても対応できる式をSheet 3に関数であらわしたいのです。 A列には氏名、Sheet1,2のB列には郵便番号、Sheet3のB列には重複を表示したいのです。 よろしくお願いいたします。

  • アクセスにおける重複データの削除について

    まったくのアクセス初心者なのでご教授お願いします。 例えば、下記のデータのような場合 社員番号 名前  受診日  1   田中  2003/05/08 1   田中  2005/10/01 2   鈴木  2004/03/11 2   鈴木  2002/07/03 と表示されているデータを、 社員番号 名前  受診日 1   田中  2005/10/01 2   鈴木  2004/03/11 としたいのです。行いたいのは、最新の受診日のデータだけを残して、古い受診日データは削除したいのです。重複クエリで重複している社員番号を持つ人は抽出できたのですが、受診日が異なるためにどちらも「違うレコード」として表示されてしまいます。方法がありましたら教えてください。 何せ10,000件近くデータがあるので、困っています。よろしくお願いします。

  • エクセル 重複データの抽出

    エクセルを使って重複データをチェックしようと思っていCOUNTIFで試したのですがうまくいきません・・・ご存知の方教えてください。m(__)m   A     B       C         D       E     F   店番  顧客番号  氏名(カナ)   電話番号   住所1   住所2 という表の電話番号が重複する先を抽出したいのです。データ件数は約3000件ほどあります。できれば重複したデータは別のシートに店番順に表示をしたいのですが関数でできるのでしょうか?

  • 「エクセル」で重複したデータだけを呼び出したい。

    「Excel2000」を使用しています。 「重複しているデータだけ抽出する」 ということは出来るでしょうか? たとえば「A列」に名前が入っていて、 「B列」に住所、「C列」に電話番号が 入っているとします。 重複した名前だけを呼び出して、 なおかつ「B列」「C列」の データも表示させたいのですが…。

  • 23歳の事務をやっているOLです。エクセルでの重複データ抽出についての

    23歳の事務をやっているOLです。エクセルでの重複データ抽出についての質問です。仕事で2つのデータから重複データを抽出しないといけなくなったのですが、エクセルはよくわからないので質問させてください。データには顧客番号と名前が入っています。   A列    B列 1 顧客番号  名前 2 1234   田中太郎 3 2345   鈴木一郎 4 3456   佐藤次郎 5 4567   伊藤三郎 6 5678   吉田四郎 ・ ・ ・ データの形式は2つともこのような感じです。 データAには約1,000件のデータがあり、データBには約300件ほどのデータがあります。 AとBの顧客番号が重複している人の顧客番号と名前を上と同じような感じで別のファイルに表示させたいのですが、どうやってやったらいいのかわかりません>< 助けてください。 どうかよろしくお願いします。

  • エクセル 重複データの検索(COUNTIF関数!?)

    A列とB列で、重複しているデータ(数字)を検索するための関数を教えて下さい。 確か、こんなような↓関数だったと思うのですが、ちょっと違うようです。 C2=IF(COUNTIF(A2,B1:B2377),"","×")

  • エクセルで別の行に並んだ重複データをチェックしたい

    ネットで色々調べてはみたのですがやり方がいまいち見つからずどなたかお力添えいただけると幸いです 同じ行にならんでいるデータ内で重複するものを見つける関数はわかったのですが 別の行に並んでいるそれぞれのデータで重複するものを見つけるやり方はありますか? 例)      A    B 1  みかん  りんご 2  みかん  ぶどう 3  りんご   もも 上記の場合、A3のりんごとB1のりんごが重複していますがこれを探したいのです ※A1のみかんとA2のみかんは含みません 不慣れな質問で大変恐縮ですが何卒よろしくお願いいたします

  • エクセルでの重複データの貼りつけ方についての質問

    電話番号の重複データにFAX番号を貼りつけたいのですが、エクセルの使い方が未熟でわかりません。 具体的には、2つのリストがあり、Aは電話番号+顧客情報、Bは電話番号+FAX番号です。 A・Bの電話番号の重複データを抽出し、重複したA・Bのデータを、電話番号+顧客情報+FAX番号というように1つにしたいのですが可能でしょうか? 拙い説明で申し訳ないですが、どなたかご指南お願いできますでしょうか?宜しくお願いします。 一応アクセスも持ってますが初心者です。

  • ◆◆急募◆◆ エクセル 重複するデータの抽出について

    データの入力された2枚のA、Bシートが同じブックにあります。 <Aシート> D2~D500まで顧客番号が入力されています。 <Bシート> C2~C600まで顧客番号が入力されています。 AシートとBシートの顧客番号はいくつか重複しています。 その重複している番号をBシートのどこかのセルに”重複”と表示したいのですが、その方法が分かりません。最終的にオートフィルタで重複と重複していないものを分けたいのです。 大至急教えてください!宜しくお願いします。

  • Excel 2007 重複データのチェックについて

    Excel 2007 重複データのチェックについて A列にあるデータ(約100件)で重複している値がある 行についてB列にフラグをつけます。 やりたいことはどの行とどの行が重複しているのかを すぐに分るようにしたいです。 添付画像のように重複している行に番号をつけていくことは可能でしょうか。 番号は1から順番に増えていきます。 自分は下記を考えましたが、これでは重複している行に「重複データ」と入る だけでわかりづらいです。 =IF(COUNTIF($A$2:A2,A2)>1,”重複データ”,”○”) よろしくお願いいたします。

専門家に質問してみよう