اذهب الي المحتوي
أوفيسنا

الردود الموصى بها

قام بنشر

السلام عليكم ورحمة الله وبركاته

مساء الخير

إذا سمحتم ممكن طريقة جمع الأرقام الموجودة داخل الخلية حتى ينتهي لرقم واحد فقط

مثال بالأرقام:

لو أفترضنا بأن الخلية A1 تحتوي على العدد 1930196874982 فإن جمع أرقامه هو

(المرحلة الأولى)

2 + 8 + 9 + 4 + 7 + 8 + 6 + 9 +  1 + 0 + 3 + 9+ 1 = 67

ثم نقوم بالجمع مرة أخرى (المرحلة الثانية)

7+ 6 = 13

ثم نقوم بالجمع مرة أخرى (المرحلة الثالثة)

3 + 1 = 4

إذن الناتج هو 4 لأننا وصلنا إلى الرقم المكون من خانة واحدة فقط

أنتهى الحل

 

وهكذا يتم التعامل دائما مع أي رقم يتم إدخاله في الخلية A1 ، أي أنه يتم الجمع على مراحل إلى أن نصل إلى العدد المكون من خانة واحد فقط وعندها نتوقف

 

ملاحظة:

1- يظهر الناتج في خلية أخرى مثلا إسمها الخلية A2

2- في المثال أعلاه عدد المراحل ثلاثة ولكن لو كان الرقم المدخل في الخلية كبير جدا فطبيعي أن تزداد عدد المراحل إلى أكثر من ذلك (أي أنها ليست دائما ثلاثة مراحل). أو بمعنى آخر تتأثر عدد المراحل بمدى كبر حجم الرقم المدخل. وطبعا نحن لايهمنا كم ستصل عدد المراحل والمهم هو فقط ناتج الجمع ولكن ذكرت ذلك لإحتمال أن تكون المعلومة تساعد في تصميم الكود.

بحثت عن الطريقة على الإنترنت ولكن لم أجد الحل الصحيح وأتمنى أن أجد الحل هنا

جزاكم الله كل خير

  • أفضل إجابة
قام بنشر

حسب فهمي للمطلوب

جرب هذه الدالة المعرفة بنسخ هذا الكود في،موديول جديد

Function sumparts(num As String) As Long
Dim n As Long, a As Long
a = 0
For n = 1 To Len(num)
a = a + Val(Mid(num, n, 1))
Next n
If Len(CStr(a)) > 1 Then
sumparts = sumparts(CStr(a))
Else
sumparts = a
End If
End Function

وبعد البحث في الانترنت عن هذا الأمر

يمكن اختصار هذه الدالة إلى

Function sumparts(num As String) As Long
sumparts = num - 9 * Int((num - 1) / 9)
End Function

وطريقة استدعائها داخل الخلية

=sumparts(A1)

حيث A1 هي الخلية التي تحتوي على العدد المراد معرفة مجموع أرقامه

ويمكن الوصول لهذا الهدف مباشرة في معادلة اكسل بهذه الصورة

=A1-9*INT((A1-1)/9)

بالتوفيق 

  • Like 3
قام بنشر

صباح الخير 

شكرا لك أخي العزيز

أنا لم أعرف إضافة الدالة للإكسيل

أخوك مبتدئ في الإكسيل

شكرا لك مرة أخرى

*******

شكرا لك أخي العزيز

نعم نحن نعمل على الأرقام الصحيحة الموجبة فقط، وبدون أي فواصل

وجربت الجدول ونعم يعمل كما هو مطلوب تماما

جزاك الله كل خير

تحياتي وتقديري

  • Like 1
قام بنشر

لاضافة دالة معرفة الى ملفك

اضغط alt+f11 لفتح نافذة ال vba

من قائمة insert اختر module 

الصق كود الدالة في الموديول

وفي الخلية المطلوب اظهار جمع الارقام اكتب 

=sumparts(A1)

حيث ان A1 هي الخلية التي تحتوي على العدد المراد تقسيمه

بالتوفيق 

  • Like 3
  • 3 weeks later...
قام بنشر
Function DigitalRoot(num As String) As Long
    Dim t As Double
    t = Val(num)
    DigitalRoot = IIf(t > 0, 1 + (t - 1) - 9 * Int((t - 1) / 9), 0)
End Function

 

=1+MOD(A1-1,9)

 

  • Like 1

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information