فروشگاه
انبارداری پیشرفته تحت اکسل

حذف داده‌های تکراری اکسل با کد VBA با 4 روش

برای حذف داده‌های تکراری اکسل در یک ستون اکسل می‌توانید از قابلیت حذف تکراری در اکسل استفاده کنید. برای این کار می‌توانید به روش زیر عمل کنید
حذف داده های تکراری یکی از مهمترین دغدغه‌های کاربران اکسل است که ما توی این آموزش کاربردی برای شما بصورت کامل با چهار روش عالی آموزش میدیم .

که چطور بتوانید داده های تکراری اکسل به راحتی حذف کنید پیشنهاد ما برای شما این است
برای حذف کردن داده های تکراری در اکسل استفاده از کد نویسی ویژوال بیسیک در اکسل است که روش بسیار عالی و سرعت بخش می باشد. پس با آکادمی روح الله همراه باشید

آموزش های پیشنهادی برای شما

قبل از هر کاری آموزش زیر را مشاهده فرمایید👇

نحوه ذخیره فایل اکسل حاوی ماکرو

آموزش فعال کردن ماکرو اکسل

نحوه ورود به محیط vba اکسل با 3 روش

پیشنهاد آکادمی روح الله برای شما 

بانک کد VBA در اکسل

آموزش رایگان اکسل

در اکسل حرفه ای شوید روح الله

دوره های جامع اکسل

فایل های آماده اکسل

روش اول حذف داده‌های تکراری اکسل با استفاده از کد نویسی VBA

می‌توانید از VBA برای حذف داده‌های تکراری در یک ستون اکسل استفاده کنید. برای این کار، می‌توانید از کد زیر استفاده کنید:


در این کد، با استفاده از تابع RemoveDuplicates مربوط به ستون A، داده‌های تکراری حذف خواهند شد. می‌توانید این کد را در یک ماژول VBA در اکسل قرار دهید و برای اجرای آن، روی دکمه اجرا کلیک کنید. همچنین، می‌توانید این کد را با استفاده از رویدادهایی مانند رویداد تغییر سلول در ستون A فراخوانی کنید تا هر بار که داده‌ای در این ستون تغییر کند، داده‌های تکراری حذف شوند.

پیش نهاد آکادمی روح الله برای شما :
گروه بندی داده ها در اکسل

روش دوم حذف داده‌های تکراری در یک ستون با کد نویسی VBA

روش سوم استخراج داده های تکراری در اکسل

  1. ابتدا ستون مورد نظر را انتخاب کنید.
  2. سپس در بخش “Data” روی گزینه “Remove Duplicates” کلیک کنید.
  3. ستون‌هایی که قصد دارید برای بررسی تکراری بودن داده‌ها استفاده شود را انتخاب کنید (می‌توانید همه ستون‌ها را انتخاب کنید).
  4. بر روی دکمه “OK” کلیک کنید.

بعد از این کار، داده‌های تکراری در ستون اکسل شما حذف خواهند شد. اگر شما تنظیمات پیشرفته‌تری را نیز مد نظر دارید می‌توانید از قابلیت فیلتر کردن و سپس حذف تکراری‌ها استفاده کنید. برای این کار می‌توانید به مراحل زیر عمل کنید:

روش چهارم یافتن داده های تکراری در یک ستون اکسل

  1. ابتدا ستون مورد نظر را انتخاب کنید.
  2. در بخش “Data” روی گزینه “Filter” کلیک کنید.
  3. در ستون مورد نظر، فیلتر “Filter by Selected Cell’s Value” را انتخاب کنید.
  4. از فیلتر “Unique” استفاده کنید.
  5. بر روی دکمه “OK” کلیک کنید.
  6. داده‌های تکراری حذف شده و تنها داده‌های یکتا باقی خواهند ماند.

با انجام این مراحل، داده‌های تکراری در ستون اکسل شما حذف خواهند شد.

میانگین رتبه 5/5 تعداد رای : 3
اکسل را حرفه ای یاد بگیر
نظر شما در مورد این مقاله چیست؟

نظر یا سوال شما در این مورد چیست؟

سلام دوست عزیز خوشحال میشوم نظر شما را در مورد این مقاله بدانم 👇

    سیدحسین

    سلام این کد Sub RemoveDuplicates()
    Range(“A1:A100”).RemoveDuplicates Columns:=1, Header:=xlNo
    End Sub خیلی به دردم میخوره فقط فرمت و قالب سلول رو هم ریمو میکنه میخوام Clear که فقط دیتا داخل سلول رو پاک کنه نه قالب و رنگ و فونت رو باید چه دستوری وارد کنم؟ بعد میخوام آخریم دیتا رو نگه دار دیتاهای بالاتر از خودش رو حذف کنه

    پاسخ

      ارادت خدمت شما دوست عزیز
      برای اینکه فقط داده‌های داخل سلول‌ها را پاک کنید و قالب‌بندی سلول‌ها (مثل رنگ و فونت) را حفظ کنید، می‌توانید از متد ClearContents استفاده کنید. همچنین برای اینکه آخرین داده‌ها را نگه دارید و داده‌های بالای آن را حذف کنید، باید کمی کد را تغییر دهید. اینجا یک کد VBA برای انجام این کار است:

      Sub RemoveDuplicatesKeepFormat()
      Dim ws As Worksheet
      Dim rng As Range
      Dim cell As Range
      Dim dict As Object
      Dim i As Long
      Dim LastRow As Long
      Dim uniqueValues As Collection

      Set ws = ThisWorkbook.Sheets("Sheet1") ' تغییر نام شیت به نام شیت خودتان
      LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
      Set rng = ws.Range("A1:A" & LastRow)
      Set dict = CreateObject("Scripting.Dictionary")
      Set uniqueValues = New Collection

      ' ذخیره کردن آخرین مقادیر یونیک
      For i = LastRow To 1 Step -1
      If Not dict.exists(rng.Cells(i, 1).Value) Then
      dict.Add rng.Cells(i, 1).Value, Nothing
      uniqueValues.Add rng.Cells(i, 1).Value
      End If
      Next i

      ' پاک کردن داده‌های تکراری بجز آخرین مورد
      For Each cell In rng
      If cell.Value <> "" Then
      If dict.exists(cell.Value) Then
      If cell.Value = uniqueValues(uniqueValues.Count) Then
      uniqueValues.Remove uniqueValues.Count
      Else
      cell.ClearContents
      End If
      End If
      End If
      Next cell
      End Sub

      این کد موارد زیر را انجام می‌دهد:
      1. آخرین مقادیر یونیک را در دیکشنری ذخیره می‌کند.
      2. از پایین به بالا در محدوده داده‌ها حرکت می‌کند و تنها مقادیر یونیک آخر را نگه می‌دارد و مابقی مقادیر تکراری را پاک می‌کند بدون اینکه قالب‌بندی سلول‌ها تغییر کند.

      اگر سوال دیگری داشتید، حتما بپرسید!
      شاد پیروز باشید مثل همیشه

      پاسخ
        سیدحسین

        سلام مجدد استاد

        من میخوام همه این ها رو در قالب یک دکمه تعریف کنم وقتی که دکمه رو میزنم اجرا کنه
        کل فرمول رو کپی کنم و جای شیت رو فقط نام ش رو تغییر بدم؟

        پاسخ

          سلام ارادت خدمت شما دوست عزیز
          افزودن دکمه به شیت
          به شیت مورد نظرتان بروید.
          به تب Developer در نوار ابزار بروید.
          بر روی Insert کلیک کنید و یک Button (Form Control) انتخاب کنید.
          دکمه را در شیت بکشید و رها کنید تا به اندازه دلخواهتان برسد.
          وقتی که پنجره Assign Macro ظاهر شد، اینجا نام ماکروی مورد نظر خود را انتخاب کنید و بر روی OK کلیک کنید.
          حالا هر بار که دکمه را فشار دهید، کد اجرا می‌شود تا داده‌های تکراری حذف خواهد شد .

          شاد پیروز باشید

          پاسخ
            سیدحسین

            ممنون استاد
            من یک پروژه داشتم از قبل که دکمه فرامین زیر رو برام اجرا میکرد

            Sub Copy2List()

            x = Sheets(“Form”).Range(“L1”).Value

            Sheets(“Form”).Range(“M1:DX1”).Copy

            Sheets(“List”).Cells(x, 1).PasteSpecial xlPasteValues
            End Sub

            حالا میخوام هر موقع دیتا جدید رو ثبت میزنم بگرده توی ستون A اگه تکراری داشت دیتایی که از قبل داشته حذف کنه یا دیتای جدید جایگزین شه وهرچی مقابل a ست
            ملاک من ستونa
            مثلا a1 وb1,c1 اطلاعات از قبل ثبت کردم
            A1 نام ونام خانوادگی
            B1 تلفن
            c1 آدرس
            ثبت شده
            حالاوقتی دکمه میزنم اطلاعات جدید که ثبت میشه اون A1 ومقابلش حذف شه

            کد شما رو اینجوری بعد فرمول خودم گذاشتم

            Sub Copy2List()

            x = Sheets(“Form”).Range(“L1”).Value

            Sheets(“Form”).Range(“M1:DX1”).Copy

            Sheets(“List”).Cells(x, 1).PasteSpecial xlPasteValues

            Dim ws As Worksheet
            Dim rng As Range
            Dim cell As Range
            Dim dict As Object
            Dim i As Long
            Dim LastRow As Long
            Dim uniqueValues As Collection

            Set ws = ThisWorkbook.Sheets(“list”) ‘ ????? ??? ??? ?? ??? ??? ??????
            LastRow = ws.Cells(ws.Rows.Count, “A”).End(xlUp).Row
            Set rng = ws.Range(“A1:A” & LastRow)
            Set dict = CreateObject(“Scripting.Dictionary”)
            Set uniqueValues = New Collection

            ‘ ????? ???? ????? ?????? ?????
            For i = LastRow To 1 Step -1
            If Not dict.exists(rng.Cells(i, 1).Value) Then
            dict.Add rng.Cells(i, 1).Value, Nothing
            uniqueValues.Add rng.Cells(i, 1).Value
            End If
            Next i

            ‘ ??? ???? ???????? ?????? ??? ????? ????
            For Each cell In rng
            If cell.Value “” Then
            If dict.exists(cell.Value) Then
            If cell.Value = uniqueValues(uniqueValues.Count) Then
            uniqueValues.Remove uniqueValues.Count
            Else
            cell.ClearContents
            End If
            End If
            End If
            Next cell
            End Sub

            End Sub

            فقط A رو هم جدید هم قدیم رو پاک میکنه
            محدوده دیتام A1:DL63 اینه

            سلام ارادت خدمت شما دوست عزیز
            برای حل این مشکل و جلوگیری از پاک کردن هر دو نسخه جدید و قدیمی در ستون A، باید کدی بنویسیم که قبل از پاک کردن داده‌های قدیمی، بررسی کند که آیا داده‌ی جدید در ستون A موجود است یا خیر. اگر موجود بود، داده‌ی قدیمی را حذف می‌کند و داده‌ی جدید را جایگزین می‌کند.

            در ادامه کد اصلاح‌شده را مشاهده می‌کنید:


            Sub Copy2List()
            Dim ws As Worksheet
            Dim rng As Range
            Dim cell As Range
            Dim LastRow As Long
            Dim i As Long
            Dim x As Long
            Dim foundCell As Range
            Dim newValue As String

            ' کپی کردن داده‌های جدید
            x = Sheets("Form").Range("L1").Value
            Sheets("Form").Range("M1:DX1").Copy
            newValue = Sheets("Form").Range("M1").Value
            Sheets("List").Cells(x, 1).PasteSpecial xlPasteValues

            ' تعیین شیت و محدوده جستجو
            Set ws = ThisWorkbook.Sheets("List")
            LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
            Set rng = ws.Range("A1:A" & LastRow)

            ' جستجو برای داده‌های تکراری و حذف آن‌ها
            Set foundCell = rng.Find(What:=newValue, LookAt:=xlWhole)
            If Not foundCell Is Nothing Then
            Do
            If foundCell.Row <> x Then
            ws.Rows(foundCell.Row).Delete
            End If
            Set foundCell = rng.FindNext(foundCell)
            Loop While Not foundCell Is Nothing
            End If
            End Sub

            این کد موارد زیر را انجام می‌دهد:
            1. داده‌های جدید را از شیت “Form” کپی کرده و در شیت “List” درج می‌کند.
            2. ستون A را بررسی می‌کند تا ببیند آیا داده جدیدی که ثبت شده در این ستون وجود دارد یا خیر.
            3. اگر داده تکراری وجود داشته باشد، داده قدیمی را حذف کرده و داده جدید را جایگزین می‌کند.

            به این ترتیب، داده‌ی قدیمی تنها زمانی حذف می‌شود که داده‌ی جدید جایگزین آن باشد، و ستون A به درستی به‌روز می‌شود.
            موفق پیروز باشید مثل همیشه