تابع 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 بالا استفاده کنید. این روش انعطافپذیر است و امکان شخصیسازی واژهها و واحد پول را فراهم میآورد.
آیا این مطلب برای شما مفید بود ؟




