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

ارنی یک کاربرگ دارد که در ستون A، یک سری اعداد ISBN را شامل می شود. برخی از این اعداد 10 رقمی و برخی 13 رقمی هستند. برخی دارای خط تیره در مکان های مختلف هستند و برخی فاقد خط تیره هستند. ارنی می داند که آخرین رقم شابک یک رقم چک بر اساس فرمول خاصی است. او به راهی برای محاسبه صحیح بودن یا نبودن رقم آخر نیاز دارد، اما نمی داند که این کار با فرمول کاربرگ یا ماکرو بهتر است انجام شود.

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

Function CheckISBN(rng As Range) As Boolean
    Dim sTemp As String
    Dim sDigits As String
    Dim J As Integer
    Dim K As Integer
    Dim bXFlag As Boolean
    Dim iTtl As Integer
    Dim iMult As Integer
    Dim iChk As Integer
    Dim sChk As String

    sTemp = rng.Text

     Check to see if rightmost character is X
     This comes into play only for 10-digit ISBNs
    bXFlag = False
    If Right(sTemp, 1) = "X" Then bXFlag = True

     Strip everything except digits
    sDigits = ""
    For J = 1 To Len(sTemp)
        If Asc(Mid(sTemp, J, 1)) > 47 And _
           Asc(Mid(sTemp, J, 1)) < 58 Then
            sDigits = sDigits & Mid(sTemp, J, 1)
        End If
    Next J

     Add back in the X, if necessary
    If bXFlag Then sDigits = sDigits & "X"

    Select Case Len(sDigits)
        Case 10    10-digit ISBN
            K = 0
            For J = 1 To Len(sDigits) - 1
                K = K + (Val(Mid(sDigits, J, 1)) * (11 - J))
            Next

            sChk = Trim(Str(11 - (K Mod 11)))
            If sChk = "10" Then sChk = "X"
            CheckISBN = True
            If sChk  Right(sDigits, 1) Then CheckISBN = False
        Case 13    13-digit ISBN
            K = 0
            iMult = 1
            For J = 1 To Len(sDigits) - 1
                K = K + (iMult * Val(Mid(sDigits, J, 1)))
                iMult = 4 - iMult
            Next J
            iChk = K Mod 10
            If iChk > 0 Then iChk = 10 - iChk
            sChk = Trim(Str(iChk))
            CheckISBN = True
            If sChk <> Right(sDigits, 1) Then CheckISBN = False
        Case Else
             ISBN isnt either 10 or 13 digits
            CheckISBN = False
    End Select
End Function

این تابع اعداد ISBN 10 یا 13 رقمی را کنترل می کند و مهم نیست که چه متن دیگری در سلول قبل از ISBN داشته باشید یا اینکه بین ارقام ISBN خط تیره، فاصله یا نقطه وجود داشته باشد. این کد هر کاراکتر غیر عددی را حذف می کند، به استثنای "X" انتهایی، که ممکن است در مورد یک ISBN 10 رقمی مهم باشد.

برای استفاده از تابع، تنها کاری که باید انجام دهید این است که به عنوان پارامتر، از یک مرجع سلولی که حاوی مقدار ISBN است استفاده کنید:

=CheckISBN(A1)

بسته به اینکه آخرین رقم ISBN در سلول A1 درست باشد یا خیر، تابع درست یا نادرست برمی گردد. (آخرین رقمی است که رقم بررسی یک ISBN را تشکیل می دهد.) چون True یا False را برمی گرداند، این تابع می تواند در قوانین قالب بندی شرطی یا در فرمول های پیچیده تر طراحی شما استفاده شود.

اگر می خواهید درباره فرآیند محاسبه واقعی یک رقم چک شابک بیشتر بدانید، باید بدانید که شابک ها می توانند 10 رقمی (برای شابک های تخصیص یافته در سال 2006 و سال های قبل) یا 13 رقمی (برای شابک هایی که پس از 1 ژانویه اختصاص داده شده اند) باشد. ، 2007). به علاوه، هر طرح از یک روش محاسبه متفاوت برای تعیین رقم چک استفاده می کند. دو صفحه وب زیر می توانند به شما در درک روش های محاسبه کمک کنند:

https://isbn-information.com/the-10-digit-isbn.html
https://isbn-information.com/check-digit-for-the-13-digit-isbn.html
اگر خواستی، با این لینک از ما حمایت کن

پاسخ شما

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

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

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

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

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

23.2k سوال

8.5k پاسخ

608 دیدگاه

9.7k کاربر

148 نفر آنلاین
0 عضو و 148 مهمان در سایت حاضرند
بازدید امروز: 10127
بازدید دیروز: 11078
بازدید کل: 15077163
...