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

بیل اغلب مجبور است اطلاعات را در یک کاربرگ وارد کند تا بتواند آن را برای شرکت خود پردازش کند. در وضعیت Bills، یکی از اولین اقداماتی که او باید انجام دهد حذف تمام کاراکترهای ASCII 8 بیتی است که ممکن است در داده های وارد شده باشد. این شخصیت ها نیازی به جایگزینی با چیزی ندارند. آنها فقط باید حذف شوند تا فقط کاراکترهای ASCII 7 بیتی باقی بمانند. بیل متعجب است که آیا راه آسانی برای انجام این کار وجود دارد، شاید با یک نوع ماکرو.

بسته به ویژگی های داده ای که با آن شروع می کنید، چند راه وجود دارد که می توانید به این مشکل نزدیک شوید. با فرض اینکه شما فقط کاراکترهای 8 بیتی در کاربرگ خود دارید، تنها کدهای کاراکتری که می توانند برای کاراکترها استفاده شوند 0 تا 255 است. اگر می خواهید داده های خود را فقط به کاراکترهای 7 بیتی محدود کنید، این بدان معناست که شما فقط چیزهایی می خواهید. در محدوده کد کاراکتر از 0 تا 127. بنابراین، می توانید از یک ماکرو برای جستجوی آسان هر کاراکتر در محدوده 128 تا 255 استفاده کنید و به سادگی آنها را حذف کنید. این ماکرو از این رویکرد استفاده می کند:

Sub Remove8Bit1()
    Cells.Select
    For i = 128 To 255
        X = Chr(i)
        Selection.Replace What:=X, Replacement:="", _
          LookAt:=xlPart, SearchOrder:=xlByRows, _
          MatchCase:=False, SearchFormat:=False, _
          ReplaceFormat:=False
    Next
End Sub

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

اگر داده های شما حاوی کاراکترهای یونیکد هستند، می خواهید از روش دیگری استفاده کنید. از نظر فنی، کاراکترهای یونیکد کاراکترهای 8 بیتی نیستند. آنها کاراکترهای 16 بیتی هستند و می توانند مقادیر کد کاراکتری در محدوده 0 تا 65535 داشته باشند. از آنجایی که می خواهید هر چیزی با مقدار بیش از 127 را نادیده بگیرید، استفاده از رویکرد مبتنی بر جستجو که قبلاً مورد بحث قرار گرفت، دشوار می شود - در نهایت به جای تنها 128، بیش از 65000 جستجو انجام می دهید.

یک روش بهتر این است که به سادگی به تمام کاراکترها در تمام سلول های انتخاب شده نگاه کنید و اگر کد کاراکتر آنها بیش از 127 است، آنها را نادیده بگیرید. این رویکرد در کلان زیر است:

Sub Remove8Bit2()
    Dim rngCell As Range
    Dim intChar As Integer
    Dim strCheckString As String
    Dim strCheckChar As String
    Dim intCheckChar As Integer
    Dim strClean As String

    For Each rngCell In Selection
        strCheckString = rngCell.Value
        strClean = ""
        For intChar = 1 To Len(strCheckString)
            strCheckChar = Mid(strCheckString, intChar, 1)
            intCheckChar = Ascw(strCheckChar)
            If intCheckChar < 128 Then
                strClean = strClean & strCheckChar
            End If
        Next intChar
        rngCell.Value = strClean
    Next rngCell
End Sub

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

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

پاسخ شما

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

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

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

سوالات مشابه

برای دسترسی راحت به مطالب سایت ، اپلیکیشن سایت را نصب کنید
و لطفا بعد از نصب امتیاز دهید. با تشکر از حمایت شما
0 دوستدار 0 امتیاز منفی
0 پاسخ 26 visibility
ارسال شده در 25 تیر 1402 موضوع: آفیس توسط: Admin
0 دوستدار 0 امتیاز منفی
0 پاسخ 25 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 37 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 29 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 26 visibility
ارسال شده در 27 تیر 1402 موضوع: آفیس توسط: Admin

24.3k سوال

9.6k پاسخ

614 دیدگاه

11.2k کاربر

331 نفر آنلاین
0 عضو و 331 مهمان در سایت حاضرند
بازدید امروز: 8406
بازدید دیروز: 25180
بازدید کل: 20345758
...