こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

【Excel】重複するデータの検索

Excel2003を使用しています。

A列にデータが入力されていたら、同行のC列の値(文字列)を取り出すようにしています。(VLOOKUP関数を使用)
A列のデータは4桁の数値なのですが、そのデータの数値が重複している場合があって、そのときは行番号の小さい方のC列の値が取り出されますよね?

データは同じでも別の行に入力されていれば、C列に入力されている値(文字列)も違うので、それが取り出されるようにしたいのですが、そういうことは可能でしょうか?

投稿日時 - 2006-12-12 15:13:32

QNo.2596387

困ってます

質問者が選んだベストアンサー

データ範囲内の重複キーを全て抽出する方法ですが如何でしょうか。
例えば、データがシート3、シート1のA1行目にキー番号を入力するとして、
A2セルに次の数式を設定して必要分下方向にコピーして下さい。
配列数式の為、入力完了時にshift+ctrl+enterキーを同時押下して下さい。
=IF(ROW($A1)-1<COUNTIF(Sheet3!$A$1:$A$200,A$1),INDEX(Sheet3!$C$1:$C$200,SMALL(IF(Sheet3!$A$1:$A$200=A$1,ROW(Sheet3!$A$1:$A$200),999),ROW($A1))),"")

投稿日時 - 2006-12-12 15:38:28

お礼

回答ありがとうございます。

早速、教えていただいた配列数式で試してみましたが、希望する検索結果が得られませんでした。

数式の中に“999”という書かれていますが、これはどういった意味なのでしょうか?A列のデータが4桁であることと何か関係があるのでしょうか?
A列のデータですが、先頭に“0”がついて4桁になっています。
先頭に“0”がついていなくて4桁のデータもありますが。。。

投稿日時 - 2006-12-12 17:10:47

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.6

NO1です。
何度も恐縮です。
A列を文字列をセルの書式設定で一括変更しても属性が変化しませんので次の方法で変更して下さい。
(1)A列選択
(2)データ→区切り位置→次へ→→次へ→列のデータ形式欄で文字列にチェック→完了

投稿日時 - 2006-12-13 19:29:41

お礼

mu2011 さん、こちらこそ何度も申し訳ありません。
教えていただいたとおりにやってみましたところ、希望通りのことができました。
お手数かけてスミマセンでした。ありがとうございました!

投稿日時 - 2006-12-14 09:19:19

ANo.5

NO1です。
>数式の中に“999”という書かれていますが、これはどういった意味なのでしょうか?
 ⇒キー不一致行番号をデータ範囲内の最大値として設定していますので、999行以上あるのであれば調整して下さい。
>A列のデータが4桁であることと何か関係があるのでしょうか?
>A列のデータですが、先頭に“0”がついて4桁になっています。
>先頭に“0”がついていなくて4桁のデータもありますが。。。
 ⇒A列データが数値と文字列で混在していると思われますので文字列に統一でお試し下さい。

投稿日時 - 2006-12-12 18:20:29

お礼

度々ありがとうございます。
>⇒A列データが数値と文字列で混在していると思われますので文字列に統一でお試し下さい。
A列のデータは数値で統一していますが、おっしゃるとおり文字列に統一して試してみましたところ、前回と同じ検索結果が出ました。。。

投稿日時 - 2006-12-13 11:57:10

ANo.4

原則は#01さんの回答と一緒なのですが少し式を変えます。
A1:C2000に検索対象の表があるとして、G1に検索したいA列のデータを入力します。H1に以下の式を貼り付けて、必要分下方向にコピーします。

=IF(COUNTIF($A$1:$A$2000,$G$1)>=ROW()-ROW($G$1)+1,INDEX($C$1:$C$2000,SUMPRODUCT(LARGE(($A$1:$A$2000=$G$1)*ROW($A$1:$A$2000),COUNTIF($A$1:$A$2000,$G$1)-ROW()+ROW($G$1)))),"")

もし検索する文字列をG1以外に配置したいならCtrl+Hで置換ウィザードを開いて、$G$1を任意の「$列$行」に置き換えてください。

投稿日時 - 2006-12-12 18:18:39

お礼

回答ありがとうございます。
教えていただいた数式で試してみたところ、希望通りのことができました!ありがとうございました。

投稿日時 - 2006-12-13 11:50:10

ANo.3

ピックアップするデータの種類が少ない場合はこれでいけると思います。
仮に以下のようにデータを仮定しました。
D列にはAND関数で、A列のキーとなるデータとC列の答えとなるデータを結合しています。
E列~G列は答えとなる種類をすべてヘッダ部分に表示してあり、それぞれの行に=IF($D2=$A2&E$1,$C2,"")という式を入れておきます。
そうすればどの行の答えが何なのかだけは分かります。

A列 B列 C列 D列 E列 F列 G列  
             ×  ○  △
100   ×  100××
100   ○  100○   ○
101   △  101△      △
101   ○  101○   ○
102   ×  102×   ×
100   △  100△      △
102   △  102△      △
101   ×  101××
100   ○  100○   ○

続いて、シートを新たに一枚挿入します。
A列にキーとなる値を入力し、B~D列のヘッダに先のシートと同様にデータの答えとなる値を入力します。
あとは、キーとなるデータの必要な箇所に=VLOOKUP($A2&B$1,Sheet1!$D$2:$G$10,3,)を入力して下さい(もちろん最後の,3,は場所によって,4,や,5,になりますよ)。
エラー値が気になるのならVLOOKUPの前にISNA関数を入れてやるとよいと思います。
A列 B列 C列 D列
   ○  ×  △
100 ○  ×  △
101 ○  ×  △
102 #N/A ×  △

ただし、冒頭でお話しましたとおり、これは答えの「種類が少ない」ときにしか、おすすめはできません。。悪しからずご了承下さい。。

投稿日時 - 2006-12-12 17:39:25

お礼

詳しい回答ありがとうございます。
>答えの「種類が少ない」ときにしか、おすすめはできません。。
大量というほどではないのですが、少なくはないので、今回は別の方法で試してみようと思います。
ありがとうございました。

投稿日時 - 2006-12-13 11:48:51

ANo.2

例えばA列に何件データがあろうとも、同一データに対するC列の値の合計が分かればよいのですか?
それともそれぞれに何か別の(例えば日付等)で、A列の同じデータであってもC列でそれぞれデータを拾うことが必要なのでしょうか?

投稿日時 - 2006-12-12 16:24:32

補足

説明不足のようで申し訳ありません。

>それぞれに何か別の(例えば日付等)で、A列の同じデータであってもC列でそれぞれデータを拾う

希望していることはこちらの方です。
例えばA1セルとA2セルに『0100』、C1セルに『○』、C2セルに『×』と入力されていたとしたら、同じデータだとC1セルの『○』が取り出されるのを『○』と『×』の両方を取り出したいのですが、可能でしょうか?

よろしくお願いします。

投稿日時 - 2006-12-12 16:48:46

あなたにオススメの質問