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

Pieter سلول های زیادی در ستون A دارد که حاوی متن هستند. به طور خاص، سلول ها هر کدام شامل چندین جمله متن هستند. او مایل است جملات را به سلول های فردی تقسیم کند. او می داند که می تواند از ابزار Text to Columns استفاده کند، اما این کاملاً مفید نیست، زیرا جملات می توانند با علائم نقطه گذاری متفاوتی به پایان برسند و برخی از علائم نگارشی را می توان در وسط جمله استفاده کرد. (مانند یک دوره بعد از عنوانی مانند آقای یا خانم) پیتر از خود می پرسد که آیا راه بهتری برای تقسیم جملات به سلول های مختلف وجود دارد؟

برای انجام این کار به صورت دستی، چند راه وجود دارد که می توانید انجام دهید. ابتدا می توانید از یک ستون کمکی برای کار با داده های خود استفاده کنید. به عنوان مثال، ممکن است این فرمول را در سلول B1 قرار دهید:

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"Mr.", "Mr#"), "Mrs.", "Mrs#"), "Ms.", "Ms#")

سپس، فرمول را به تعداد سلول های لازم کپی کنید. چیزی که در نهایت به آن می رسید این است که عناوین رایج شما (آقا، خانم، و خانم) با یک دنباله منحصر به فرد از شخصیت ها (آقای#، خانم#، و خانم#) جایگزین می شوند. نتایج ستون B را به عنوان مقادیر در ستون B کپی کنید (بنابراین فرمول حذف می شود)، و سپس از Text to Columns در ستون B استفاده کنید. در نهایت، از Find and Replace برای تغییر تمام نمونه های کاراکتر # به نقطه استفاده کنید.

اشکالی که در این مورد وجود دارد این است که این فرمول تنها سه کاربرد متداول از این دوره را به خود اختصاص می دهد، جایی که ممکن است نیاز باشد در واقع چند مورد دیگر را مدیریت کنید. به عنوان مثال، جملات شما ممکن است عناوینی مانند دکتر یا شاخص های اعتباری مانند Ph.D. یا Esq. فهرست چنین اختصاری های پر دوره می تواند بسیار طولانی باشد. در این موارد، می توانید تغییرات را به صورت دستی به این صورت انجام دهید:

  1. از Find and Replace برای جستجوی تمام نقطه های متن خود استفاده کنید، و به جای نقطه های بدون جمله با کاراکتر نشانگر (# در تکنیک بالا) استفاده کنید.
  2. برای تقسیم جملات از ابزار Text to Columns استفاده کنید.
  3. از Find and Replace برای تغییر همه نمونه های کاراکتر نشانگر به نقطه استفاده کنید.

باز هم، اگر دوره های غیر پایانی زیادی دارید، این فرآیند ممکن است مدت زیادی طول بکشد.

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

اگر شروع به استفاده از Find and Replace برای مقابله با همه این علائم نگارشی و استثناها کنید، به سرعت می توانید به یک سری مراحل پیچیده بپردازید. بهتر است سعی کنید تقسیم را با استفاده از یک ماکرو انجام دهید. در اینجا یکی است که بیشتر جملات و اختصارات را به درستی مدیریت می کند:

Sub SplitSentences()
    Dim c As Range
    Dim sException(8) As String
    Dim sReplacement(8) As String
    Dim sTerm(6) As String
    Dim sTemp As String
    Dim J As Integer
    Dim sExp As Variant

     These are the valid ways for a sentence to end
    sTerm(1) = ". "
    sTerm(2) = "! "
    sTerm(3) = "? "
    sTerm(4) = "." & Chr(34)
    sTerm(5) = "!" & Chr(34)
    sTerm(6) = "?" & Chr(34)

     These are the exceptions to the rule
     of a period ending a sentence
    sException(1) = "Mr."
    sException(2) = "Mrs."
    sException(3) = "Ms."
    sException(4) = "Dr."
    sException(5) = "Esq."
    sException(6) = "Ph.D."
    sException(7) = "a.m."
    sException(8) = "p.m."

     Set up the replacements for the exceptions
    For J = 1 To 8
        sReplacement(J) = Replace(sException(J), ".", "[{}]")
    Next J

    For Each c In Selection
        sTemp = c.Value

         Convert all the exceptions
        For J = 1 To 8
            sTemp = Replace(sTemp, sException(J), sReplacement(J))
        Next J

         Demarcate sentences with a tab
        For J = 1 To 6
            sTemp = Replace(sTemp, sTerm(J), Trim(sTerm(J)) & Chr(9))
        Next J

         Split sentences into an array
        sExp = Split(sTemp, Chr(9))
        For J = 0 To UBound(sExp)
             Replace the code for valid periods
            sExp(J) = Replace(sExp(J), "[{}]", ".")
             Place sentences into adjacent cells on row
            c.Offset(0, J).Value = Trim(sExp(J))
        Next J
    Next c
End Sub

توجه داشته باشید که خاتمه جملات قابل قبول در آرایه sTerm و اختصارات قابل قبول در آرایه sException ذکر شده است. اگر متن شما ممکن است دارای اختصارات دیگری باشد، پس می خواهید آرایه sException را گسترش دهید تا آن ها را نیز شامل شود.

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

توجه داشته باشید که ماکرو هر چیزی را که در سلول های انتخاب شده بود جایگزین می کند و در هر چند سلول های زیادی در سمت راست انتخاب برای ذخیره جملات لازم است. به همین دلیل، ممکن است بخواهید مطمئن شوید که کاربرگ اصلی خود را قبل از انتخاب محدوده ای از سلول ها و اجرای ماکرو ذخیره کرده اید.

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

Sheila earned her Ph.D. She was very happy.

حال به یک جمله زیر توجه کنید:

Sheila earned her Ph.D. from an Ivy League school.

وقتی این دو مثال را با هم مقایسه می کنید (دو جمله در مقابل جمله واحد)، هیچ راهی برای تشخیص برنامه نویسی بین Ph.D وجود ندارد. یک جمله را به پایان می رساند یا اگر در وسط جمله باشد بدون بررسی اینکه آیا کلمه زیر با یک حرف بزرگ شروع می شود یا یک علامت نقل قول و بعد از آن یک حرف بزرگ شروع می شود. این می تواند خیلی سریع پیچیده شود. بعلاوه، این برای تمام اختصارات صدق می کند، نه فقط Ph.D. کلان مورد اشاره به جای تلاش برای پیش بینی و مقابله با همه چنین وقایعی، حتی سعی نمی کند تشخیص دهد که اختصار یک جمله را به پایان می رساند یا نه - به سادگی با تمام اختصارات به گونه ای برخورد می کند که گویی در وسط جمله اتفاق می افتند.

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

پاسخ شما

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

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

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

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

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

23.2k سوال

8.5k پاسخ

608 دیدگاه

9.7k کاربر

83 نفر آنلاین
0 عضو و 83 مهمان در سایت حاضرند
بازدید امروز: 9436
بازدید دیروز: 8462
بازدید کل: 15420126
...