[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『重複データを調べる方法(COUNTIF以外)』(moto)
ABCD
あ あ
う い
く う
え
お
・A列に記入されたデータが、C列に存在するかを調べたいです。
・A列C列共に、数万行単位のデータが入力されています。
・COUNTIFやVLOOKUPを検討しましたが、参照範囲(C列)が広いことから、非常に重たい処理になってしまうため、代案を探しています。
御教示頂けますと幸いです。何卒宜しくお願い致します。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
関数でやるなら、C列を昇順に並べ替えてから(振り仮名を使わないモード)、LOOKUP関数を使う。 それで、C列は数十個程度と同等の意味になります。 ただ、A列の方はどうしようもないので、 どれくらい改善するかは、結局やってみないと分からないです。
C列の並べ替えが無理なら(=ありのままでやらないといけないのでしたら)、 VBAのDictionaryオブジェクトを活用することになると思います。 こっちはかなり速いです。私はコードを書く気はないですけど。
ところで「重複データが存在した場合」どの様な出力結果にするんですか? それが分からないと、関数でも、VBAでも具体案は作れないです。
(半平太) 2015/08/27(木) 20:20
とりあえず、Dictionaryを使い、重複があったA列のセルを赤く色塗りします。
Sub Test() Dim dic As Object Dim c As Range Dim r As Range
Set dic = CreateObject("Scripting.Dictionary") For Each c In Range("C1", Range("C" & Rows.Count).End(xlUp)) dic(c.Value) = True Next
With Range("A1", Range("A" & Rows.Count).End(xlUp)) .Interior.ColorIndex = xlNone For Each c In .Cells If dic.exists(c.Value) Then If r Is Nothing Then Set r = c Else Set r = Union(r, c) End If End If Next If Not r Is Nothing Then r.Interior.ColorIndex = 3 End With
End Sub
(β) 2015/08/27(木) 20:48
私の勉強不足で、
>昇順に並べ替えてからLOOKUP関数
の方法だと正しい結果がでませんでした。
言葉不足で申し訳ありませんでしたが、
B列に”重複”なり、抽出結果が分かるようにできればと思ってました。
β様に教えて頂きましたコードを元に、見事に思い描いていたコードが書けました。
速度が大幅に改善されました。
(まだDictionaryオブジェクトの仕組みについては???ですが…調べて勉強していきます。)
ありがとうございました。勉強続けています。
(moto) 2015/08/31(月) 23:16
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.