حذف دادههای تکراری اکسل با کد VBA با 4 روش
- آخرین بروزرسانی: 31 اردیبهشت 1402
برای حذف دادههای تکراری اکسل در یک ستون اکسل میتوانید از قابلیت حذف تکراری در اکسل استفاده کنید. برای این کار میتوانید به روش زیر عمل کنید
حذف داده های تکراری یکی از مهمترین دغدغههای کاربران اکسل است که ما توی این آموزش کاربردی برای شما بصورت کامل با چهار روش عالی آموزش میدیم .
که چطور بتوانید داده های تکراری اکسل به راحتی حذف کنید پیشنهاد ما برای شما این است
برای حذف کردن داده های تکراری در اکسل استفاده از کد نویسی ویژوال بیسیک در اکسل است که روش بسیار عالی و سرعت بخش می باشد. پس با آکادمی روح الله همراه باشید
آموزش های پیشنهادی برای شما
قبل از هر کاری آموزش زیر را مشاهده فرمایید👇
نحوه ذخیره فایل اکسل حاوی ماکرو
نحوه ورود به محیط vba اکسل با 3 روش
پیشنهاد آکادمی روح الله برای شما
روش اول حذف دادههای تکراری اکسل با استفاده از کد نویسی VBA
میتوانید از VBA برای حذف دادههای تکراری در یک ستون اکسل استفاده کنید. برای این کار، میتوانید از کد زیر استفاده کنید:
1 2 3 4 5 6 7 |
Sub RemoveDuplicates() Dim ws As Worksheet Dim LastRow As Long Set ws = ActiveSheet LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' تعیین آخرین سطر دادهها در ستون A ws.Range("A1:A" & LastRow).RemoveDuplicates Columns:=1, Header:=xlNo ' حذف دادههای تکراری End Sub |
در این کد، با استفاده از تابع RemoveDuplicates مربوط به ستون A، دادههای تکراری حذف خواهند شد. میتوانید این کد را در یک ماژول VBA در اکسل قرار دهید و برای اجرای آن، روی دکمه اجرا کلیک کنید. همچنین، میتوانید این کد را با استفاده از رویدادهایی مانند رویداد تغییر سلول در ستون A فراخوانی کنید تا هر بار که دادهای در این ستون تغییر کند، دادههای تکراری حذف شوند.
روش دوم حذف دادههای تکراری در یک ستون با کد نویسی VBA
1 2 3 |
Sub RemoveDuplicates() Range("A1:A100").RemoveDuplicates Columns:=1, Header:=xlNo End Sub |
روش سوم استخراج داده های تکراری در اکسل
- ابتدا ستون مورد نظر را انتخاب کنید.
- سپس در بخش “Data” روی گزینه “Remove Duplicates” کلیک کنید.
- ستونهایی که قصد دارید برای بررسی تکراری بودن دادهها استفاده شود را انتخاب کنید (میتوانید همه ستونها را انتخاب کنید).
- بر روی دکمه “OK” کلیک کنید.
بعد از این کار، دادههای تکراری در ستون اکسل شما حذف خواهند شد. اگر شما تنظیمات پیشرفتهتری را نیز مد نظر دارید میتوانید از قابلیت فیلتر کردن و سپس حذف تکراریها استفاده کنید. برای این کار میتوانید به مراحل زیر عمل کنید:
روش چهارم یافتن داده های تکراری در یک ستون اکسل
- ابتدا ستون مورد نظر را انتخاب کنید.
- در بخش “Data” روی گزینه “Filter” کلیک کنید.
- در ستون مورد نظر، فیلتر “Filter by Selected Cell’s Value” را انتخاب کنید.
- از فیلتر “Unique” استفاده کنید.
- بر روی دکمه “OK” کلیک کنید.
- دادههای تکراری حذف شده و تنها دادههای یکتا باقی خواهند ماند.
با انجام این مراحل، دادههای تکراری در ستون اکسل شما حذف خواهند شد.
سلام این کد 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 به درستی بهروز میشود.
موفق پیروز باشید مثل همیشه