• ベストアンサー

excel2003の、値抽出方法について。

写真のように、A列に重複しているリストがあります。 C列に重複を排除したリストを作成する場合。 どのようにすればいいでしょうか。 VBAで記述した場合の方法と、関数の場合の方法とで それぞれ教えていただけるとありがたいです。

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

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

Excelの一般機能で対応するなら、A列を選択して「データ」「フィルタ」「フィルタオプションの設定」で「重複するレコードは無視する」にチェックを入れ、抽出先を「指定した範囲」にしてC1セルを選択するのがお勧めです。 データ数が多くなると動きが重くなるのであまりお勧めできませんが、補助列を使用しない関数で対応したいなら、以下のような数式を入力して下方向に適当数オートフィルすることになります。 =INDEX(A:A,SMALL(INDEX((MATCH($A$2:$A$100&"",$A$2:$A$100&"",0)<>ROW($A$2:$A$100)-1)*1000+ROW($A$2:$A$100),),ROW(1:1)))&""

puyopa
質問者

お礼

「重複するレコードは無視する」というオプションが求めていた回答だった 気がします。 ありがとうございました。

その他の回答 (3)

noname#204879
noname#204879
回答No.4

B1: =IF(COUNTIF(A$1:A1,A1)=1,ROW(),"") C1: =IF(ISERROR(SMALL(B:B,ROW(A1))),"",INDEX(A:A,SMALL(B:B,ROW(A1))))

puyopa
質問者

お礼

回答ありがとうございます。 参考になりました。

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

こんにちは! 一例です。 関数の場合 B列を作業用の列として使用します。 B2セルに =IF(COUNTIF(A$2:A2,A2)=1,ROW(),"") という数式を入れオートフィルでしっかり下へコピーしておきます。 C2セルに =IF(COUNT(B:B)<ROW(A1),"",INDEX(A:A,SMALL(B:B,ROW(A1)),)) という数式を入れこれもオートフィルで下へコピー! これで重複なしに表示されます。 VBAの場合というより一番簡単なのは 「フィルタオプション」で「重複するレコードは無視する」にチェックを入れる方法だと思いますが、 いかにもマクロらしくやるとしたら Sub Sample1() Dim i As Long, endRow As Long endRow = Cells(Rows.Count, "C").End(xlUp).Row If endRow > 1 Then Range(Cells(2, "C"), Cells(endRow, "C")).ClearContents End If For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row If WorksheetFunction.CountIf(Range("C:C"), Cells(i, "A")) = 0 Then Cells(Rows.Count, "C").End(xlUp).Offset(1) = Cells(i, "A") End If Next i End Sub こんな感じではどうでしょうか?m(_ _)m

puyopa
質問者

お礼

回答ありがとうございます。 こんな考え方もあるんだというのが、面白くて参考になりました。 出来れば、作業セルは使わず行える方法が望ましいです。

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

ピボットテーブルを作ると重複していないリストができます。

puyopa
質問者

お礼

回答ありがとうございます。 そうですね。その存在を忘れていました。 簡単に出来る方法として、覚えておきたいと思います。

関連するQ&A