ایجاد سوال
dark_mode
0 دوستدار 0 امتیاز منفی
12 visibility
موضوع: آفیس توسط:

Dror یک کاربرگ دارد که حاوی اطلاعات بسیار کمی است. این امکان وجود دارد که داده های یک ستون دقیقاً مشابه داده های ستون دیگر باشد، بنابراین او نمی داند که آیا راه آسانی برای حذف ستون های تکراری در کاربرگ وجود دارد.

البته اولین قدم این است که بفهمیم دو ستون یکسان هستند یا نه. این را می توان به راحتی با فرمول آرایه ای مانند زیر تعیین کرد:

=AND(A1:A100=B1:B100)

(به یاد داشته باشید که یک فرمول آرایه با استفاده از Shift+Ctrl+Enter وارد می شود.) فرمول تمام مقادیر 100 ردیف اول ستون های A و B را با هم مقایسه می کند. اگر همه آنها یکسان باشند، فرمول TRUE را برمی گرداند. اگر هیچ یک از سلول ها مطابقت نداشته باشد، فرمول FALSE را برمی گرداند. اگر نتیجه درست است، می توانید یکی از ستون ها را حذف کنید، زیرا آنها یکسان هستند.

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

Sub DeleteDuplicateColumns()
    Dim rngData As Range
    Dim arr1, arr2
    Dim i As Integer, j As Integer, n As Integer

    On Error Resume Next
    Set rngData = ActiveSheet.UsedRange
    If rngData Is Nothing Then Exit Sub

    n = rngData.Columns.Count

    For i = n To 2 Step -1
        For j = i - 1 To 1 Step -1
            If WorksheetFunction.CountA(rngData.Columns(i)) <> 0 And _
              WorksheetFunction.CountA(rngData.Columns(j)) <> 0 Then
                arr1 = rngData.Columns(i)
                arr2 = rngData.Columns(j)
                If AreEqualArr(arr1, arr2) Then
                    With rngData.Columns(j)
                        mark column to be deleted
                        .Copy
                        If MsgBox("Delete marked column?", vbYesNo) _
                          = vbYes Then
                            rngData.Columns(j).Delete
                        Else
                            remove mark
                            Application.CutCopyMode = False
                        End If
                    End With
                End If
            End If
        Next j
    Next i

End Sub
Function AreEqualArr(arr1, arr2) As Boolean
    Dim i As Long, n As Long
    AreEqualArr = False
    For n = LBound(arr1) To UBound(arr1)
        If arr1(n, 1) <> arr2(n, 1) Then
            Exit Function
        End If
    Next n
    AreEqualArr = True
End Function
اگر خواستی، با این لینک از ما حمایت کن

پاسخ شما

looks_5نام شما برای نمایش - اختیاری
حریم شخصی : آدرس ایمیل شما محفوظ میماند و برای استفاده های تجاری و تبلیغاتی به کار نمی رود
عدد چهار رقمی در تصویر را وارد کنید

برای جلوگیری از این تایید در آینده, لطفا وارد شده یا ثبت نام کنید.
اگر حساب گوگل دارید به راحتی وارید شوید

0 پاسخ وجود دارد

سوال مشابهی یافت نشد

برای دسترسی راحت به مطالب سایت ، اپلیکیشن سایت را نصب کنید
و لطفا بعد از نصب امتیاز دهید. با تشکر از حمایت شما

23.2k سوال

8.5k پاسخ

608 دیدگاه

9.7k کاربر

73 نفر آنلاین
0 عضو و 73 مهمان در سایت حاضرند
بازدید امروز: 8814
بازدید دیروز: 23384
بازدید کل: 15259714
...