الدليل الشامل خطوة بخطوة للمحاسبين والشركات لإضافة دالة التفقيط الاحترافية مجاناً
إذا كنت تعمل في مجال المحاسبة، الموارد البشرية (HR)، أو إدارة الأعمال، فمن المؤكد أنك تقضي وقتاً طويلاً في كتابة الفواتير، الشيكات، وكشوف المرتبات. كتابة المبلغ بالأرقام أمر سهل، ولكن تحويل الأرقام إلى حروف باللغة العربية (التفقيط) يدوياً هو عملية مرهقة ومضيعة للوقت، ناهيك عن احتمالية الوقوع في أخطاء إملائية أو نحوية قد تكلف الشركة الكثير.
في هذا المقال الحصري من دنيا التقنية، لن تحتاج إلى كتابة أي رقم بالحروف يدوياً بعد اليوم. سنضع بين يديك أفضل كود تفقيط الأرقام في الإكسيل (VBA)، بالإضافة إلى كود برمجي مخصص لمستخدمي جوجل شيت (Google Sheets). بضغطة زر، ستتمكن من تحويل آلاف الأرقام إلى نصوص قانونية سليمة تدعم كافة العملات والكسور.
لماذا يعتبر التفقيط في الإكسيل ضرورة لا غنى عنها؟
عملية تفقيط المبالغ المالية ليست مجرد تنسيق جمالي، بل هي ضرورة قانونية صارمة تعتمد عليها البنوك والمؤسسات الحكومية. من خلال خبرتنا في دعم الأنظمة المحاسبية، نؤكد أن استخدام دالة تفقيط آلية يوفر لك المزايا التالية:
- منع التزوير: الأرقام الحسابية يسهل التلاعب بها (بإضافة صفر مثلاً)، لكن النص المكتوب (مثل: ألف ريال فقط لا غير) يستحيل تزويره.
- الدقة المطلقة: الأكواد التي سنطرحها تدعم الكسور (الهللة، القرش، السنت) بدقة متناهية وبدون أخطاء برمجية.
- توفير مئات الساعات: بفضل خاصية السحب والإفلات (AutoFill)، يمكنك تفقيط 10,000 فاتورة في ثانيتين فقط.
القسم الأول: كود تفقيط الأرقام في الإكسيل (Excel VBA)
إذا كان عملك يعتمد على نظام مايكروسوفت ويندوز وبرنامج الإكسيل، فهذا الكود مخصص لك. لقد قمنا ببرمجة دالة ذكية ومرنة جداً.
1. خطوات إضافة كود التفقيط في Excel
- قم بفتح ملف الإكسيل الخاص بك.
- من لوحة المفاتيح، اضغط معاً على زري
Alt + F11. ستفتح لك شاشة “محرر الأكواد” (Visual Basic for Applications). - من القائمة العلوية، اضغط على Insert (إدراج)، ثم اختر Module (وحدة نمطية).
- ستظهر لك صفحة بيضاء. انسخ الكود التالي بالكامل والصقه هناك:
' =========================================================
' كود تفقيط الأرقام وتحويلها إلى حروف - حصرياً من دنيا التقنية
' يدعم جميع العملات العربية والعالمية والكسور
' =========================================================
Function TafqeetArabic(ByVal MyNumber As Double, Optional MainCurrency As String = "ريال", Optional SubCurrency As String = "هللة") As String
Dim Reeds As Variant, Tens As Variant, Hundreds As Variant
Dim Millions As Variant
Dim DecimalValue As Integer
Dim WholeNumber As String
Dim Result As String
Dim TempString As String
Dim i As Integer
' مصفوفات الكلمات الأساسية
Reeds = Array("", "واحد", "اثنان", "ثلاثة", "أربعة", "خمسة", "ستة", "سبعة", "ثمانية", "تسعة", "عشرة", "أحد عشر", "اثنا عشر", "ثلاثة عشر", "أربعة عشر", "خمسة عشر", "ستة عشر", "سبعة عشر", "ثمانية عشر", "تسعة عشر")
Tens = Array("", "عشرة", "عشرون", "ثلاثون", "أربعون", "خمسون", "ستون", "سبعون", "ثمانون", "تسعون")
Hundreds = Array("", "مائة", "مائتان", "ثلاثمائة", "أربعمائة", "خمسمائة", "ستمائة", "سبعمائة", "ثمانمائة", "تسعمائة")
Millions = Array("", "ألف", "مليون", "مليار", "تريليون")
' التعامل مع الأصفار
If MyNumber = 0 Then
TafqeetArabic = "صفر " & MainCurrency
Exit Function
End If
' فصل العدد الصحيح عن الكسر
WholeNumber = CStr(Int(MyNumber))
DecimalValue = Round((MyNumber - Int(MyNumber)) * 100)
' تفقيط العدد الصحيح
If WholeNumber > 0 Then
Dim Parts() As String
Dim PCount As Integer
PCount = 0
Dim NumStr As String
NumStr = WholeNumber
Do While Len(NumStr) > 0
ReDim Preserve Parts(PCount)
If Len(NumStr) <= 3 Then
Parts(PCount) = NumStr
NumStr = ""
Else
Parts(PCount) = Right(NumStr, 3)
NumStr = Left(NumStr, Len(NumStr) - 3)
End If
PCount = PCount + 1
Loop
For i = 0 To UBound(Parts)
Dim GroupValue As Integer
GroupValue = CInt(Parts(i))
If GroupValue > 0 Then
TempString = ""
Dim H As Integer, T As Integer, U As Integer
H = GroupValue \ 100
T = GroupValue Mod 100
If H > 0 Then TempString = Hundreds(H)
If T > 0 Then
If Len(TempString) > 0 Then TempString = TempString & " و"
If T < 20 Then
TempString = TempString & Reeds(T)
Else
U = T Mod 10
T = T \ 10
If U > 0 Then TempString = TempString & Reeds(U) & " و"
TempString = TempString & Tens(T)
End If
End If
If i > 0 Then
If GroupValue = 1 Then
TempString = Millions(i)
ElseIf GroupValue = 2 Then
If i = 1 Then TempString = "ألفان"
If i = 2 Then TempString = "مليونان"
If i = 3 Then TempString = "ملياران"
ElseIf GroupValue >= 3 And GroupValue <= 10 Then
If i = 1 Then TempString = TempString & " آلاف"
If i = 2 Then TempString = TempString & " ملايين"
If i = 3 Then TempString = TempString & " مليارات"
Else
TempString = TempString & " " & Millions(i) & "اً"
End If
End If
If Len(Result) > 0 Then
Result = TempString & " و" & Result
Else
Result = TempString
End If
End If
Next i
Result = Result & " " & MainCurrency
End If
' تفقيط الكسر
If DecimalValue > 0 Then
Dim DecString As String
If DecimalValue < 20 Then
DecString = Reeds(DecimalValue)
Else
Dim DT As Integer, DU As Integer
DT = DecimalValue \ 10
DU = DecimalValue Mod 10
If DU > 0 Then
DecString = Reeds(DU) & " و" & Tens(DT)
Else
DecString = Tens(DT)
End If
End If
If Len(Result) > 0 Then
Result = Result & " و" & DecString & " " & SubCurrency & " فقط لا غير."
Else
Result = DecString & " " & SubCurrency & " فقط لا غير."
End If
Else
Result = Result & " فقط لا غير."
End If
TafqeetArabic = Trim(Result)
End Function
- أغلق شاشة الأكواد من علامة
X. - احفظ الملف كـ Macro-Enabled: اذهب إلى
File>Save As، واختر صيغة الملف لتكونExcel Macro-Enabled Workbook (*.xlsm)لضمان عدم ضياع الكود عند إغلاق البرنامج.
2. كيفية استدعاء دالة التفقيط الجديدة
الآن أصبح لديك دالة جاهزة تُدعى =TafqeetArabic. لاستخدامها:
- إذا كان الرقم في الخلية
A2(مثلاً:4500.50). - قف في الخلية التي تريد ظهور النص فيها (مثلا B2)، واكتب المعادلة التالية:
=TafqeetArabic(A2) - اضغط
Enter، لتظهر النتيجة فوراً: (أربعة آلاف و خمسمائة ريال و خمسون هللة فقط لا غير.)
للجنيه:
=TafqeetArabic(A2, "جنيه", "قرش")للدولار:
=TafqeetArabic(A2, "دولار", "سنت")
القسم الثاني: كود تحويل الأرقام لحروف في جوجل شيت (Google Sheets)
الكثير من الشركات الحديثة وفرق العمل عن بُعد تفضل استخدام جداول بيانات جوجل (Google Sheets). وبما أن لغة الـ VBA لا تعمل هنا، قمنا بكتابة سكريبت مخصص ببرمجة Google Apps Script ليعطيك نفس النتيجة القوية.
خطوات تركيب كود التفقيط في جوجل شيت
- افتح ملفك على Google Sheets.
- من القائمة العلوية، اضغط على الإضافات (Extensions)، ثم اختر برمجة التطبيقات (Apps Script).
- ستفتح لك شاشة برمجة جديدة. قم بتظليل ومسح أي كود مكتوب بداخلها.
- الصق الكود التالي:
/**
* تحويل الأرقام إلى نصوص باللغة العربية (تفقيط) - دنيا التقنية
* @param {number} number الرقم المراد تفقيطه
* @param {string} mainCurrency العملة الأساسية (مثال: "ريال"، "جنيه")
* @param {string} subCurrency العملة الفرعية (مثال: "هللة"، "قرش")
* @return النص المفقط
* @customfunction
*/
function TAFQEET(number, mainCurrency = "ريال", subCurrency = "هللة") {
if (number === "" || isNaN(number)) return "";
if (number == 0) return "صفر " + mainCurrency;
const arUnits = [
{ s: "", d: "", p: "", a: "" },
{ s: "ألف", d: "ألفان", p: "آلاف", a: "ألفاً" },
{ s: "مليون", d: "مليونان", p: "ملايين", a: "مليوناً" },
{ s: "مليار", d: "ملياران", p: "مليارات", a: "ملياراً" },
{ s: "تريليون", d: "تريليونان", p: "تريليونات", a: "تريليوناً" }
];
const arOnes = ["", "واحد", "اثنان", "ثلاثة", "أربعة", "خمسة", "ستة", "سبعة", "ثمانية", "تسعة"];
const arTens = ["", "عشرة", "عشرون", "ثلاثون", "أربعون", "خمسون", "ستون", "سبعون", "ثمانون", "تسعون"];
const arTeens = ["عشرة", "أحد عشر", "اثنا عشر", "ثلاثة عشر", "أربعة عشر", "خمسة عشر", "ستة عشر", "سبعة عشر", "ثمانية عشر", "تسعة عشر"];
const arHundreds = ["", "مائة", "مائتان", "ثلاثمائة", "أربعمائة", "خمسمائة", "ستمائة", "سبعمائة", "ثمانمائة", "تسعمائة"];
function tafqeetArabicWhole(numStr) {
if (numStr === "0" || numStr === "") return "صفر";
let parts = [];
let str = numStr;
while (str.length > 0) {
parts.unshift(parseInt(str.slice(-3), 10));
str = str.slice(0, -3);
}
let words = [];
let scaleIdx = parts.length - 1;
for (let i = 0; i < parts.length; i++) {
let p = parts[i];
if (p === 0) { scaleIdx--; continue; }
let h = Math.floor(p / 100), rem = p % 100, t = Math.floor(rem / 10), o = rem % 10;
let partWords = [];
if (h > 0) partWords.push(arHundreds[h]);
if (rem > 0) {
if (rem < 10) partWords.push(arOnes[o]);
else if (rem < 20) partWords.push(arTeens[rem - 10]);
else {
if (o > 0) partWords.push(arOnes[o] + " و" + arTens[t]);
else partWords.push(arTens[t]);
}
}
let partStr = partWords.join(" و");
if (scaleIdx > 0) {
if (p === 1) partStr = arUnits[scaleIdx].s;
else if (p === 2) partStr = arUnits[scaleIdx].d;
else if (p >= 3 && p <= 10) partStr += " " + arUnits[scaleIdx].p;
else partStr += " " + arUnits[scaleIdx].a;
}
words.push(partStr);
scaleIdx--;
}
return words.filter(w => w !== "").join(" و");
}
let wholeNumber = Math.floor(number).toString();
let decimalValue = Math.round((number - Math.floor(number)) * 100);
let result = "";
if (parseInt(wholeNumber) > 0) {
let mainText = tafqeetArabicWhole(wholeNumber);
if (parseInt(wholeNumber) === 1) result = mainCurrency;
else if (parseInt(wholeNumber) === 2) result = mainCurrency + "ان";
else result = mainText + " " + mainCurrency;
}
if (decimalValue > 0) {
let decText = tafqeetArabicWhole(decimalValue.toString());
if (result !== "") result += " و" + decText + " " + subCurrency + " فقط لا غير.";
else result = decText + " " + subCurrency + " فقط لا غير.";
} else {
result += " فقط لا غير.";
}
return result.trim();
}
- اضغط على أيقونة الحفظ (Save) من الشريط العلوي، وأغلق الصفحة.
- عُد إلى جدولك، واكتب في أي خلية المعادلة التالية:
=TAFQEET(A2, "دينار", "فلس")(أو حسب عملتك والخلية المطلوبة).
أخطاء شائعة للمبتدئين يجب تجنبها ⚠️
=TafqeetArabic(A2) داخل الخلية A2). هذا يجعل البرنامج يدور في حلقة مفرغة ويعطيك رسالة خطأ فورية.✔️ الحل الصحيح: اكتب الرقم في عمود (مثل
A)، واكتب المعادلة في عمود فارغ مجاور له (مثل B) واستدعِ الخلية الأولى.
حيلة الخبراء: سحب المعادلة (AutoFill) لتفقيط مئات الأرقام
إذا كان لديك شيت يحتوي على 1000 رقم، لا تقم بكتابة المعادلة 1000 مرة. فقط اكتب المعادلة في الخلية الأولى، ثم قف بمؤشر الماوس على الزاوية السفلية لخلية النتيجة (حتى يتحول المؤشر لعلامة + سوداء)، ثم اضغط مرتين متتاليتين (Double Click) أو اسحب للأسفل. سيقوم البرنامج بتفقيط العمود بأكمله في ثانية واحدة!


