ویژگی تصویر

تابع BAHTTEXT در اکسل — معرفی، کاربرد و جایگزین‌های فارسی

  /  اکسل   /  تابع bahttext در اکسل
بنر تبلیغاتی الف

تابع BAHTTEXT یکی از توابع مخصوص اکسل است که عدد را به متن نوشتاریِ واحد پول تایلندی (Baht) تبدیل می‌کند. نتیجه این تابع همیشه به زبان تایلندی خواهد بود و برای نمایشِ عدد به صورت حروفِ مربوط به «บาท» (Baht) و «สตางค์» (Satang) استفاده می‌شود. در ادامه عملکرد، مثال‌ها، محدودیت‌ها و راهکارهایی برای تولید خروجی به زبان فارسی را بررسی می‌کنیم.

چه کاری انجام می‌دهد؟

فرمول پایه:

=BAHTTEXT(number)

این فرمول مقدار عددی را گرفته و متن معادل آن را به واحد پول تایلند برمی‌گرداند. مثال عملی:

=BAHTTEXT(1234.56)

نتیجه: متنی به زبان تایلندی مانند “หนึ่งพันสองร้อยสามสิบสี่บาทห้าสิบหกสตางค์” (معادل 1234.56 Baht).

مثال‌های عملی و جدول خروجی

فرمولورودیخروجی تقریبی
=BAHTTEXT(0)0ศูนย์บาทถ้วน (صفر بات)
=BAHTTEXT(123.45)123.45หนึ่งร้อยยี่สิบสามบาทสี่สิบห้าสตางค์
=BAHTTEXT(-75)-75-เจ็ดสิบห้าบาทถ้วน (منفی و به زبان تایلندی)

موارد استفاده

  • تهیه گزارش‌های مالی چندزبانه با واحد پول تایلندی.
  • چاپ اسناد مالی که نیاز به نمایش مبلغ به‌صورت حروف در زبان تایلندی دارند.
  • کنترل صحت ورود اعداد و تطبیق متن حروفی با عدد برای صدور فاکتور.

محدودیت‌ها و نکات مهم

  • زبان و واحد خروجی: BAHTTEXT همیشه متن تایلندی و واحد Baht/ Satang تولید می‌کند. این تابع برای تبدیل عدد به حروفِ فارسی مناسب نیست.
  • نام تابع در نسخه‌های محلی اکسل: در برخی نسخه‌های اکسل (با زبان‌های مختلف) نام توابع ممکن است ترجمه شده باشد. اگر تابع BAHTTEXT در نسخه شما کار نمی‌کند، باید بررسی کنید که آیا نام تابع در نسخهٔ محلی تغییر کرده یا افزونه‌ای لازم است.
  • گردش اعشاری: تابع با توجه به بخش اعشاری تا دو رقم صدم (Satang) را به متن تبدیل می‌کند و معمولاً رندینگ را هم در نظر می‌گیرد.
  • پشتیبانی در پلتفرم‌ها: در اکسل دسکتاپ و اکسل آنلاین معمولاً قابل استفاده است، اما بسته به نسخه و تنظیمات زبان/منطقه تفاوت وجود دارد.

چرا BAHTTEXT برای فارسی مناسب نیست و راهکار عملی

اگر هدف شما تبدیل عدد به حروف فارسی (مثلاً ریال یا تومان) است، باید از راهکار جایگزین استفاده کنید چون BAHTTEXT متن تایلندی تولید می‌کند. بهترین راهکار استفاده از یک تابع سفارشی (VBA) یا افزونه است که عدد را به حروف فارسی تبدیل کند.

نمونه کد VBA برای تبدیل عدد به حروف فارسی (برای استفاده در اکسل)

Public Function NumberToPersianWords(ByVal value As Double, Optional ByVal currencyName As String = "ریال") As String
    Dim units As Variant, teens As Variant, tens As Variant, hundreds As Variant
    units = Array("", "یک", "دو", "سه", "چهار", "پنج", "شش", "هفت", "هشت", "نه")
    teens = Array("ده", "یازده", "دوازده", "سیزده", "چهارده", "پانزده", "شانزده", "هفده", "هجده", "نوزده")
    tens = Array("", "", "بیست", "سی", "چهل", "پنجاه", "شصت", "هفتاد", "هشتاد", "نود")
    hundreds = Array("", "صد", "دویست", "سیصد", "چهارصد", "پانصد", "ششصد", "هفتصد", "هشتصد", "نهصد")
    
    If value = 0 Then
        NumberToPersianWords = "صفر " & currencyName
        Exit Function
    End If
    
    Dim intPart As Variant, fracPart As Integer
    intPart = Int(Abs(value))
    fracPart = CInt(Round((Abs(value) - intPart) * 100, 0)) ' دو رقم اعشار
    
    Dim scales As Variant
    scales = Array("", "هزار", "میلیون", "میلیارد", "تریلیون")
    
    Dim parts() As String
    ReDim parts(0 To 0)
    Dim idx As Integer: idx = 0
    Dim group As Integer
    Do While intPart > 0
        group = intPart Mod 1000
        If group  0 Then
            Dim partText As String
            partText = ConvertThreeDigits(group, units, teens, tens, hundreds)
            If scales(idx)  "" Then
                If group = 1 And scales(idx) = "هزار" Then
                    partText = scales(idx) ' "هزار" به جای "یک هزار"
                Else
                    partText = partText & " " & scales(idx)
                End If
            End If
            parts(UBound(parts)) = partText
            ReDim Preserve parts(0 To UBound(parts) + 1)
        End If
        idx = idx + 1
        intPart = Int(intPart / 1000)
    Loop
    
    Dim result As String
    Dim i As Integer
    For i = 0 To UBound(parts) - 1
        If parts(i)  "" Then
            If result = "" Then
                result = parts(i)
            Else
                result = parts(i) & " " & result
            End If
        End If
    Next i
    
    If value  0 Then
        result = result & " و " & ConvertThreeDigits(fracPart, units, teens, tens, hundreds) & " صدم"
    End If
    
    NumberToPersianWords = result
End Function

Private Function ConvertThreeDigits(ByVal n As Integer, units As Variant, teens As Variant, tens As Variant, hundreds As Variant) As String
    Dim h As Integer, t As Integer, u As Integer
    h = Int(n / 100)
    t = Int((n Mod 100) / 10)
    u = n Mod 10
    Dim res As String
    If h > 0 Then res = hundreds(h)
    If t = 1 Then
        If res  "" Then res = res & " "
        res = res & teens(u)
    Else
        If t > 1 Then
            If res  "" Then res = res & " "
            res = res & tens(t)
            If u > 0 Then res = res & " و " & units(u)
        Else
            If u > 0 Then
                If res  "" Then res = res & " "
                res = res & units(u)
            End If
        End If
    End If
    ConvertThreeDigits = res
End Function

توضیح کد به زبان فارسی:

  • تابع عمومی NumberToPersianWords ورودی عددی را گرفته و متن معادل فارسی آن را بازمی‌گرداند. پارامتر دوم اختیاری است و نام واحد پول را مشخص می‌کند (پیش‌فرض “ریال”).
  • تابع کمک‌کننده ConvertThreeDigits سه رقم (0–999) را به متن تبدیل می‌کند و از آرایه‌های واحدها، دهگان‌ها، صدها و اعداد 10–19 استفاده می‌کند.
  • عدد صحیح به گروه‌های سه‌رقمی تقسیم می‌شود و هر گروه همراه با مقیاس مناسب (هزار، میلیون، میلیارد و …) به هم متصل می‌گردد. برای “هزار” اگر مقدار گروه برابر 1 باشد، تنها “هزار” نوشته می‌شود (نه “یک هزار”).
  • برای اعشار تا دو رقم، مقدار به‌صورت “و xx صدم” اضافه می‌شود. می‌توانید این بخش را مطابق نیاز (مثلاً تومان) تغییر دهید یا حذف کنید.
  • برای استفاده: در ویرایشگر VBA یک ماژول جدید بسازید، کد را جایگذاری کنید و سپس در شیت اکسل از فرمولی مانند =NumberToPersianWords(A1,”تومان”) استفاده کنید.

نکات نهایی و بهینه‌سازی

  • اگر نیاز چندزبانه دارید می‌توانید با تغییر آرایه‌ها نسخه‌های مختلف زبان را پیاده کنید.
  • برای استفاده در فایل‌های اشتراکی، کتاب‌کار را با فرمت .xlsm ذخیره کنید تا ماژول VBA نگه داشته شود.
  • در فرمول‌های بزرگ یا تعداد بالا، اجرای ماکرو ممکن است کندتر از توابع بومی باشد؛ در صورت نیاز به بهینه‌سازی می‌توان برخی عملیات را کش کرد یا از افزونه‌های حرفه‌ای استفاده کرد.

خلاصه: تابع BAHTTEXT برای تولید متنِ واحد پول تایلند مناسب است، اما برای تبدیل عدد به حروف فارسی باید از راهکارهای سفارشی مانند ماژول VBA بالا استفاده کنید. این روش انعطاف‌پذیر است و امکان شخصی‌سازی واژه‌ها و واحد پول را فراهم می‌آورد.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: