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

Ankur دارای یک کاربرگ است که دارای هزاران سلول حاوی اصطلاحات مختلف است. او باید تعداد زیادی از آن اصطلاحات و سلول هایی را که در آنها وجود دارند حذف کند. برای مثال، ممکن است لازم باشد تمام سلول های حاوی عباراتی مانند «google»، «youtube»، «linkedin» و بسیاری از اصطلاحات دیگر را حذف کند. آنکور می داند که می تواند هر یک از این عبارات را جستجو و جایگزین کند، اما این کاملا خسته کننده است. او فکر می کند که آیا راهی وجود دارد که بتواند تمام عباراتی را که باید حذف شوند شناسایی کند و سپس اکسل آنها را از هزاران سلول حذف کند.

اگر نیاز به انجام این نوع کارها به طور منظم دارید، بهترین راه حل استفاده از ماکرو است. ترفند این است که چگونه در ماکرو دقیقاً چه چیزی را می خواهید جایگزین کنید مشخص کنید. یک راه این است که اطلاعات را در یک آرایه قرار دهید، مانند مثال زیر:

Sub RemoveTerms1()
    Dim vTerm As Variant
    Dim vArray As Variant

    vArray = Array("google", "youtube", "linkedin")
    For Each vTerm in vArray
        Selection.Replace What:=vTerm, _
          Replacement:="", LookAt:=xlPart
    Next vTerm
End Sub

عبارات مورد جستجو در آرایه vArray قرار می گیرند و سپس هر یک از اعضای آرایه (هر عبارت) از آن عبور می کنند. متد Replace با شی Selection برای انجام تعویض های واقعی استفاده می شود. ماکرو سلول ها را حذف نمی کند. به سادگی هر متنی را که با این اصطلاح مطابقت دارد حذف می کند. هنگام جایگزینی، جستجو به حروف بزرگ و کوچک حساس نیست، بنابراین "google" با "Google" مطابقت دارد.

از آنجایی که شی Selection استفاده می شود، مهم است که مطمئن شوید لیستی را که می خواهید پردازش کنید، قبل از اجرای ماکرو انتخاب کنید. اگر این کار را نکنید، هیچ چیز جایگزین نمی شود.

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

Sub RemoveTerms2()
    Dim c As Range
    Dim rngSource As Range
    Dim vTerm As Variant
    Dim arrTerms As Variant
    Dim i As Integer

    i = -1
    arrTerms = Array()
    For Each c In Range("D1:D9").Cells
        If Trim(c.Value) > "" Then
            i = i + 1
            ReDim Preserve arrTerms(i)
            arrTerms(i) = Trim(c.Value)
        End If
    Next c

    On Error Resume Next
    Set rngSource = Application.InputBox( _
                    Prompt:="Please select Range", _
                    Title:="Removing Cells Containing Terms", _
                    Default:=ActiveSheet.UsedRange.Address, Type:=8)
    On Error GoTo 0
    If rngSource Is Nothing Then
        MsgBox ("You didnt specify a range to process")
    Else
        For Each vTerm in arrTerms
            rngSource.Replace What:=vTerm, _
              Replacement:="", LookAt:=xlWhole
        Next vTerm
    End If
End Sub

این ماکرو عبارات جستجو را از محدوده D1:D9 می کشد و سپس از شما می خواهد محدوده سلول هایی را که می خواهید پردازش کنید انتخاب کنید. از همان روش Replace استفاده می کند که در ماکرو قبلی استفاده شده بود، با این تفاوت که پارامتر LookAt را xlWhole تعیین می کند. این بدان معناست که عبارت جستجو باید با کل سلول مطابقت داشته باشد تا حذف شود. با این حال، اصطلاحات هنوز به حروف بزرگ و کوچک حساس نیستند.

توجه داشته باشید که نمونه هایی که تاکنون ارائه شده اند در واقع هیچ سلولی را حذف نمی کنند. آنها به سادگی محتویات سلول ها را حذف می کنند. در بسیاری از موارد این دقیقاً همان چیزی است که شما می خواهید زیرا نمی خواهید طرح بندی کاربرگ واقعی را مختل کنید. اگر واقعاً می خواهید سلول ها را حذف کنید، از روش جایگزینی استفاده نمی کنید. در عوض، می توانید مقایسه متن گسترده را روشن کنید و از عملگر Like استفاده کنید تا ببینید آیا مطابقت دارد یا خیر.

Option Compare Text

Sub RemoveTerms3()
    Dim c As Range
    Dim rngSource As Range
    Dim vTerm As Variant
    Dim arrTerms As Variant
    Dim i As Integer
    Dim sLook As String

    i = -1
    arrTerms = Array()
    For Each c In Range("D1:D9").Cells
        If Trim(c.Value) > "" Then
            i = i + 1
            ReDim Preserve arrTerms(i)
            arrTerms(i) = Trim(c.Value)
        End If
    Next c

    On Error Resume Next
    Set rngSource = Application.InputBox( _
                    Prompt:="Please select Range", _
                    Title:="Removing Cells Containing Terms", _
                    Default:=ActiveSheet.UsedRange.Address, Type:=8)
    On Error GoTo 0
    If rngSource Is Nothing Then
        MsgBox ("You didnt specify a range to process")
    Else
        For Each vTerm in arrTerms
            sLook = "*" & vTerm & "*"
            For Each c In rngSource
                If c.Value Like sLook Then c.Delete
            Next
        Next vTerm
    End If
End Sub

توجه داشته باشید که عبارات جستجو هنوز از محدوده D1:D9 خارج می شوند و همچنان از شما محدوده مورد نظر برای پردازش خواسته می شود. از آنجا، اما، روند متفاوت است: ماکرو هر سلول را بررسی می کند و اگر تطابق جزئی وجود داشته باشد، سلول حذف می شود.

برای اینکه این تغییر در ماکرو به درستی کار کند، باید خط Option Compare Text را خارج از خود رویه قرار دهید. این به VBA دستور می دهد تا کلمات کلیدی (مانند Like) را فعال کند که امکان مقایسه متن را فراهم می کند.

اگر خواستی، با این لینک از ما حمایت کن

پاسخ شما

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

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

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

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

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

23.2k سوال

8.5k پاسخ

608 دیدگاه

9.7k کاربر

105 نفر آنلاین
0 عضو و 105 مهمان در سایت حاضرند
بازدید امروز: 343
بازدید دیروز: 14599
بازدید کل: 15081975
...