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

کاران دارای داده های متنی زیادی در یک ورک بوک است. برخی از آن داده های متنی حاوی تاریخ است. او به راهی برای حذف تاریخ ها نیاز دارد، اما هر متن دیگری را که ممکن است در یک سلول باشد بگذارد. به عنوان مثال، آنچه با عنوان «آزمایش 15/4/16 با موفقیت انجام شد» یا «تست در 15/4/16 انجام شد» شروع می شود، پس از حذف، «تست با موفقیت انجام شد» و «تست در تاریخ اجرا شد».

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

=SUBSTITUTE(A1,MID(A1,SEARCH("?/??/??",A1),7),)

چنین فرمولی مشکلات متعددی دارد. ابتدا، اگر تاریخ در سلول A1 وجود نداشته باشد یا اگر تاریخ در سلول A1 فقط یک روز تک رقمی داشته باشد، مقدار خطا را برمی گرداند. علاوه بر این، اگر تاریخ دارای یک ماه دو رقمی باشد، آن رقم اول را دست نخورده باقی می گذارد (به شرطی که تاریخ از یک روز دو رقمی استفاده کند) یا مقدار خطا را برمی گرداند (اگر تاریخ از یک روز تک رقمی استفاده کند).

اگر تاریخ شما در ابتدا یا انتهای متن در یک سلول ظاهر می شود، می توانید از نوع دیگری از فرمول استفاده کنید:

=IFERROR( IF( VALUE( LEFT( A1, 1)) > 0, RIGHT( A1, LEN(A1) - 7), ""), LEFT( A1, FIND( "/", A1) - 2))

مشکل این رویکرد این است که به الگوی دقیق M/DD/YY یا MM/D/YY نیز نیاز دارد. بنابراین همان مشکلات فرمول قبلی را نشان می دهد.

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

Function RemoveDates(ByVal vC As String)
    Dim arr As Variant
    Dim s As String
    Dim i As Integer

    RemoveDates = ""
    If vC > "" Then
        arr = Split(vC, " ")
        For i = LBound(arr) To UBound(arr)
            If Not IsDate(arr(i)) Then
                s = s & arr(i) & " "
            End If
        Next i
        RemoveDates = Left(s, Len(s) - 1)
    End If
End Function

شما از ماکرو به عنوان یک تابع تعریف شده توسط کاربر در کاربرگ خود به صورت زیر استفاده می کنید:

=RemoveDates(A1)

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

Function RemoveDates(MyRange As Range) As String
    Dim sRaw As String
    Dim sPattern As String
    Dim regEx As New RegExp

    sRaw = MyRange.Value

    sPattern = "[0-9]{1,2}[-.\/][0-9]{1,2}[-.\/][0-9]{2}"

    With regEx
        .Global = True
        .MultiLine = True
        .IgnoreCase = False
        .pattern = sPattern
    End With

    If regEx.Test(sRaw) Then
        RemoveDates = regEx.Replace(sRaw, "")
    Else
        RemoveDates = "Not matched"
    End If
    Set regEx = Nothing
End Function

این تابع در کاربرگ شما مانند تابع تعریف شده قبلی توسط کاربر استفاده می شود:

=RemoveDates(A1)

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

به منظور استفاده از رویکرد بیان منظم، باید مطمئن شوید که یک مرجع به کتابخانه زیر در ویرایشگر ویژوال بیسیک قرار داده اید (مرجع را از منوی ابزار انتخاب کنید):

Microsoft VBScript Regular Expressions 5.5

همچنین باید توجه داشته باشید که اگر تاریخ در سلولی که شما به آن ارجاع می دهید قرار نگرفته باشد، تابع "Not matched" را برمی گرداند.

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

پاسخ شما

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

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

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

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

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

23.2k سوال

8.5k پاسخ

608 دیدگاه

9.7k کاربر

105 نفر آنلاین
0 عضو و 105 مهمان در سایت حاضرند
بازدید امروز: 5696
بازدید دیروز: 23827
بازدید کل: 15440212
...