Excel VBA 質問スレッド No.202 (未解決)

大量のデータの重複チェック

投稿者 : TM82     投稿日時 : 2021/03/23(Tue) 23:55:25     OS : Windows 10     EXCEL : Excel 2013
はじめまして。
TM82と申します。

VBAは、簡単なものをネットで検索して、丸写しするくらいのことしかしたことのない初心者です。

今回、仕事で20万件あるデータから、重複しているデータを抽出(重複している一方にのみ印をつける)しようとしています。
最初は

=IF(COUNTIF($E$5:E5,E5)>1,"★","")

でのチェックを試みたのですが、数式を20万行コピーすると、処理に時間がかかり過ぎてしまいます。マクロの記録も使ってみたのですが、意味がありませんでした。(やってることは同じですもんね…)

VBAでなら、この数式を高速で処理できるのかな?と思うのですが、ネットで検索しても思うようなものが見つからず、こちらでどなたかのお知恵をお借りできれば…と思い、質問させていただきました。

※ちなみに、sheet1にマクロ起動のボタンを設置したいと思っています。(sheet2が重複チェックをいたいデータです。重複の★マークは、sheet2のE列に直接表示させます)

どうぞよろしくお願いいたします。

[返信 1] Re : 大量のデータの重複チェック
投稿者 : 通りすがり     投稿日時 : 2021/03/30(Tue) 14:33:57
まだこの板をチェックしているかは知りませんが、こんな感じかな

Dim Dic As Object
Dim Cl As Range
Dim Wk As String

Application.ScreenUpdating = False
Set Dic = CreateObject("Scripting.Dictionary")
Set Cl = ThisWorkbook.Worksheets("Sheet2").Range("E5")

Do Until Cl.Value = "" 'E5からデータが途切れず連続している前提
  Wk = Replace(Cl.Value, "★", "") '2度以上のチェックが実施済みのケースを想定して★を消す

  If Dic.Exists(Wk) = False Then
    Dic(Wk) = True
  Else
    Cl.Value = "★" & Wk '★をどういう風に入れ込むのかは調整して下さい
  End If

  Set Cl = Cl.Offset(1, 0)
Loop

Application.ScreenUpdating = True

当掲示板について
返信入力フォーム
お 名 前  :
内  容   :
ステータス  : この質問を解決済みにする

認証コード  :
        キャプチャ画像


( 処理日時 : 2021-04-21 08:36:12 )

Page
Top