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

تام یک کاربرگ دارد که حاوی حدود 20000 سلول پر از داده های متنی است. او باید از درون این سلول ها الگوی خاصی از متن را استخراج کند. الگوی ##-##### است که هر # یک رقم است. این الگو در یک مکان مشخص در هر سلول ظاهر نمی شود. تام به این فکر می کند که آیا راهی برای استخراج اطلاعات مورد نظر وجود دارد؟

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

=MID(A1,FIND("-",A1)-2,8)

این خط تیره را پیدا می کند و سپس دو کاراکتر سمت چپ خط تیره را می گیرد. این بدیهی است که اگر در جاهای دیگر متن خط تیره وجود داشته باشد یا اگر ممکن است "الگوهایی" شامل اعداد غیر رقمی (مانند 12-34B32) وجود داشته باشد، کار نمی کند و شما می خواهید آنها را حذف کنید. در این صورت به فرمول بسیار پیچیده تری نیاز دارید:

=IF(ISERROR(INT(MID(A1, FIND("-", A1, 1)-2, 2)) & INT(MID(
A1, FIND("-", A1, 1)+1, 5))), "", MID(A1, FIND("-", A1)-2, 8))

این شامل یک مؤلفه بررسی خطا است که متوجه می شود آیا نویسه های درست قبل از خط تیره و درست بعد از خط تیره حاوی چیزی غیر از رقم هستند یا خیر. اگر این کار را انجام دهند، هیچ چیز برگردانده نمی شود.

تنها کاری که این رویکردهای فرمولی انجام نمی دهند، رسیدگی به موقعیت هایی است که ممکن است بیش از یک مورد از الگو در یک سلول وجود داشته باشد. در این صورت، ماکرو بهترین رویکرد است. موارد زیر الگوهای معتبر را استخراج کرده و در یک کاربرگ جدید به نام «نتایج» قرار خواهند داد.

Sub ExtractPattern()
    On Error Resume Next
    Set SourceSheet = ActiveSheet
    Set TargetSheet = ActiveWorkbook.Sheets("Results")
    If Err = 0 Then
        Worksheets("Results").Delete
    End If
    Worksheets.Add
    ActiveSheet.Name = "Results"
    Set TargetSheet = ActiveSheet
    Cells(1, 1).Value = "Found Codes"
    Cells(1, 1).Font.Bold = True
    iTargetRow = 2

    SourceSheet.Select
    Selection.SpecialCells(xlCellTypeLastCell).Select
    Range(Selection, Cells(1)).Select

    For Each c In Selection.Cells
        If c.Value Like "*##-#####*" Then
            sRaw = c.Value
            iPos = InStr(sRaw, "-")
            Do While iPos > 0
                If iPos < 3 Then
                    sRaw = "  " & sRaw
                    iPos = iPos + 2
                End If
                sTemp = Mid(sRaw, iPos - 2, 8)
                sRaw = Mid(sRaw, iPos + 6, Len(sRaw))
                If sTemp Like "##-#####" Then
                    TargetSheet.Cells(iTargetRow, 1) = sTemp
                    iTargetRow = iTargetRow + 1
                Else
                    sRaw = Mid(sTemp, 4, 5) & sRaw
                End If
                iPos = InStr(sRaw, "-")
            Loop
        End If
    Next c
End Sub

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

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

پاسخ شما

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

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

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

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

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

23.2k سوال

8.5k پاسخ

608 دیدگاه

9.7k کاربر

91 نفر آنلاین
0 عضو و 91 مهمان در سایت حاضرند
بازدید امروز: 10689
بازدید دیروز: 23384
بازدید کل: 15261589
...