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

Anne-Mie متوجه می شود که می تواند از علامت های عام (*؟) برای جستجو در اکسل استفاده کند، اما نمی داند که آیا می تواند از حروف عام در رشته جایگزین استفاده کند. به عنوان مثال، او می خواهد «ab*de» را جستجو کند و آن را با «aa*de» جایگزین کند، جایی که ستاره نشان دهنده هر تعداد کاراکتر یا هیچ کدام است.

پاسخ کوتاه این است که همانطور که توضیح داده شد هیچ راهی برای انجام این کار در اکسل وجود ندارد. اگر فقط می خواهید کاراکتر دوم یک مقدار متن را از "b" به "a" تبدیل کنید، این کار را می توان به راحتی انجام داد:

=REPLACE(A1,2,1,"a")

با این حال، احتمالاً این چیزی نیست که شما می خواهید انجام دهید. شما راهی برای استفاده از حروف عام در متن "جایگزینی با" می خواهید. اصطلاح فنی برای انجام چنین جایگزینی رشته ها REGEX نامیده می شود که مخفف عبارت Regular Expression است. REGEX با زبان هایی مانند Perl شروع شد اما آنقدر قدرتمند بود که بسیاری از زبان های برنامه نویسی دیگر آن را به آن اضافه کردند.

VBA مورد استفاده در اکسل نیز از این قاعده مستثنی نیست. اولین قدم در استفاده از REGEX روشن کردن آن است. این کار را در ویرایشگر VBA با انتخاب Tools | انجام می دهید مراجع و سپس اطمینان از وجود یک علامت تیک در کنار گزینه Microsoft VBScript Regular Expressions. اگر بیش از یک نسخه از مرجع موجود است، آخرین نسخه را انتخاب کنید.

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

اشیاء REGEX دارای یک متد تست و یک ویژگی Pattern هستند. این به این معنی است که شما ویژگی Pattern را تنظیم می کنید و سپس روش Test بررسی می کند که آیا الگو وجود دارد یا خیر. یک شی REGEX همچنین دارای یک متد Replace است که برای انجام جایگزینی استفاده می شود.

قبل از ادامه، درک این نکته مهم است که عبارات منظم می توانند بسیار پیچیده و «گیک» باشند. هیچ راه حلی در این مورد نیست؛ نحوه کار با عبارات منظم موضوع کل کتاب ها بوده است. خوشبختانه، برای اهداف این نکته، عبارات ماهیت نسبتاً ساده ای دارند. در این مورد به خوبی از الگوی "^ab.*de$" استفاده کنید. این الگو به کلمه ای اشاره دارد که (با علامت ^) با "ab" شروع می شود و پس از آن یک عبارت دلخواه (با علامت *) متشکل از حداقل یک کاراکتر (که با نقطه نشان داده می شود) و پایان می یابد (با علامت $) با "" پایان می یابد. د".

در اینجا کدی وجود دارد که استفاده از شی REGEX را برای انجام جایگزین های واقعی پیاده سازی می کند.

Public Function SearchNReplace1(Pattern1 As String, _
  Pattern2 As String, Replacestring As String, _
  TestString As String)
    Dim reg As New RegExp

    reg.IgnoreCase = True
    reg.MultiLine = False
    reg.Pattern = Pattern1
    If reg.Test(TestString) Then
        reg.Pattern = Pattern2
        SearchNReplace1 = reg.Replace(TestString, ReplaceString)
    Else
        SearchNReplace1 = TestString
    End If
End Function

برای استفاده از این ماکرو، با رشته هایی که می خواهید در ستون A تغییر دهید، شروع کنید. با فرض اینکه اولین رشته در سلول A1 است، می توانید موارد زیر را در سلول دیگری قرار دهید تا متن تغییر یافته را دریافت کنید:

=SearchNReplace1("^ab.*de$","^ab","aa",A1)

این به ماکرو می گوید که الگویی که می خواهید جستجو کنید "^ab.*de$" (اولین پارامتر) است و می خواهید "^ab" را با "aa" جایگزین کنید. این فرمول را می توان در ستون چسباند، و در نهایت با تبدیل ستون A مواجه می شوید که در آن رشته "ab*de" با "aa*de" جایگزین می شود.

اگر به دلایلی ترجیح می دهید از عبارات REGEX در VBA استفاده نکنید، می توانید یک ماکرو ایجاد کنید که به سادگی از میان گروهی از سلول های انتخاب شده عبور می کند و هر سلولی را که با "ab" شروع می شود و با "de" ختم می شود، جستجو می کند. سپس قسمت ابتدایی را با "aa" جایگزین می کند.

Sub SearchNReplace2()
    Dim sFindInitial As String
    Dim sReplaceInitial As String
    Dim iLenInitial As Integer
    Dim sFindFinal As String
    Dim sReplaceFinal As String
    Dim iLenFinal As Integer
    Dim sTemp As String
    Dim rCell As Range

    sFindInitial = "ab"
    sReplaceInitial = "aa"
    sFindFinal = "de"
    sReplaceFinal = "de"

    For Each rCell In Selection
        sTemp = rCell.Value
        iLenInitial = Len(sFindInitial)
        iLenFinal = Len(sFindFinal)
        If Left(sTemp, iLenInitial) = sFindInitial And _
            Right(sTemp, iLenFinal) = sFindFinal Then
            sTemp = Mid(sTemp, iLenInitial + 1)
            sTemp = Left(sTemp, Len(sTemp) - iLenFinal)
            sTemp = sReplaceInitial & sTemp & sReplaceFinal
            rCell.Value = sTemp
        End If
    Next
    Set rCell = Nothing
End Sub

برای استفاده از این روال کافی است سلول هایی را که می خواهید تغییر دهید انتخاب کنید و سپس ماکرو را اجرا کنید. همچنین در صورت نیاز باید تغییراتی در متغیرهای sFindInitial، sReplaceInitial، sFindFinal و sReplaceFinal ایجاد کنید.

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

پاسخ شما

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

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

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

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

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

23.2k سوال

8.5k پاسخ

608 دیدگاه

9.7k کاربر

61 نفر آنلاین
0 عضو و 61 مهمان در سایت حاضرند
بازدید امروز: 5039
بازدید دیروز: 8462
بازدید کل: 15415731
...