اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

توزيع المبالغ


إذهب إلى أفضل إجابة Solved by محي الدين ابو البشر,

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

السلام عليكم ورحمة الله وبركاته ارجو المساعدة فى هذا الشيت لتوزيع المبالغ هناخذ مثال محمود اسمه مكرر مرتين مرة لوحدة ومرة أخرى اسمه مشترك مع اسم محمد ،، و محمود هيدفع 150 هنا يبدء ينظر في الخلية E1 مكتوب فيها كام 100 هنا هيسدد لمحمود 100 هيتفضل 50 هتروح فين 50 هتروح في الاسم المشترك مع محمد يبقى كد محمود فلوسة التوزعت 100 في خلية لوحدة و50 فى خلية الاخرى ـ محمد مبلغة 50 هيدفع 50 وفى الخلية دى كان فيها 50 بتاعت محمود هنا يبدء يجمع 50 محمود + 50 محمد يكون الناتج 100 ، المثال الاخر سعيد داخل باربع ادوار وبيدفع 400 هينظر فى الخلية E1 مكتوب فيها كام 100 من هنا يبدء يرحل 100 امام كل اسم سعيد  ويكون الترحيل بشرط الاسم وشرط شهر ويكون الترحيل فى شيت تجميع المبالغ  والله الموفق

الجمعية الشهرية (2).xlsm

رابط هذا التعليق
شارك

عليكم السلام

ممكن؟؟!!!

Sub test()
Dim ws As Worksheet: Set ws = Sheets("توزيع المبالغ")
Dim sh As Worksheet: Set sh = Sheets("تجميع المبالغ")
Dim a, b, c, m, d
Dim i&, ii&, x&
a = ws.Cells(6, 7).CurrentRegion
b = sh.Cells(6, 1).CurrentRegion.Offset(2).Columns(1)
ReDim c(1 To UBound(b) - 2, 1 To 2)
m = ws.Range("E1")
    For i = 2 To UBound(a)
        For ii = 6 To UBound(a, 2)
            If (a(i, ii)) = "" Then Exit For
            x = Application.Match(a(i, ii), b, 0)
            c(x, 1) = IIf(c(x, 1) = "", a(i, 2), c(x, 1) & " + " & a(i, 2))
         If a(i, 4) <= m Then
         c(x, 2) = c(x, 2) + a(i, 4)
         Else
         c(x, 2) = c(x, 2) + m: a(i, 4) = a(i, 4) - m
         End If
        Next
    Next
    d = sh.Range(sh.Cells(5, 1), sh.Cells(5, 1).End(xlToRight)).Value
    On Error Resume Next
    For i = 1 To UBound(d, 2): d(1, i) = Split(d(1, i), "/")(0): Next
    d = Application.Transpose(d)
    x = Application.Match(Split(ws.Range("E7"), "/")(0), d, 0)
    With sh
   .Cells(6, 2).Resize(UBound(c)) = c
    .Cells(6, x).Resize(UBound(c)) = Application.Index(c, 0, 2)
    End With
End Sub

 

الجمعية الشهرية (2) (3).xlsm

تم تعديل بواسطه محي الدين ابو البشر
  • Like 1
  • Thanks 1
رابط هذا التعليق
شارك

تسلم يمينك استاذ محى الدين التوزيع المبالغ بضبط ولكن عند ادخال شهر جديد مثلا مثل شهر 3 لا يرحل الى شهر 3 بل يرحل الى شهر 12 وان اخترت اى شهر لا يرحل الا الى شهر 12 هى الدى النقطة الفاضلة والف شكر على تعبك ومجهودك الواضح

رابط هذا التعليق
شارك

شكرا على الاستجابة استاذنا الفاضل   

 ملحوظة عند الترحيل اجعله لا يحذف الشهور السابقة من شيت تجميع المبالغ 

 

1.JPG

رابط هذا التعليق
شارك

ادخلت التواريخ فى الرنج E13:E7 ومازالت تلك المشكلة موجوده يرحل الى شهر 12 فقط ومها اخترت اي شهر اخر  لا يرحل الا لشهر 12

رابط هذا التعليق
شارك

اخى @فوزى فوزى

ارفق ملف بعد ان تعمل التغييرات التي تريدها في الشيت

وشكل النتائج المطلوبه 

اشرح في الشيت الخطأ والصواب مفروض يكون ايه 

  • Like 1
رابط هذا التعليق
شارك

استاذ حسونة السلام عليكم ورحمة الله وبركاته استاذ محى جزاه الله خير هو حل الشيت ويعتبر الشيت هو خلصان بس فيه نقطة فى الترحيل الاستاذ محى جزاه الله خير هو عارف اللى مطلوب

  • Like 1
رابط هذا التعليق
شارك

  • أفضل إجابة

أخي العزيز

ممكن تستبدل بهذا الكود عسى ولعل

Sub test()
Dim ws As Worksheet: Set ws = Sheets("توزيع المبالغ")
Dim sh As Worksheet: Set sh = Sheets("تجميع المبالغ")
Dim a, b, c, m, d
Dim x#
Dim i&, ii&
a = ws.Cells(6, 7).CurrentRegion
b = sh.Cells(6, 1).CurrentRegion.Offset(2).Columns(1)
ReDim c(1 To UBound(b) - 2, 1 To 2)
m = ws.Range("E1")
    For i = 2 To UBound(a)
        For ii = 6 To UBound(a, 2)
            If (a(i, ii)) = "" Then Exit For
            x = Application.Match(a(i, ii), b, 0)
            c(x, 1) = IIf(c(x, 1) = "", a(i, 2), c(x, 1) & " + " & a(i, 2))
         If a(i, 4) <= m Then
         c(x, 2) = c(x, 2) + a(i, 4)
         Else
         c(x, 2) = c(x, 2) + m: a(i, 4) = a(i, 4) - m
         End If
        Next
    Next
    d = sh.Range(sh.Cells(5, 4), sh.Cells(5, 4).End(xlToRight)).Value
    On Error Resume Next
    For i = 1 To UBound(d, 2): d(1, i) = 1 * Split(d(1, i), "/")(0): Next
    d = Application.Transpose(d)
    x = Application.Match(1 * Split(ws.Range("E7"), "/")(0), d, 0)
    With sh
    .Cells(6, 2).Resize(UBound(c)) = c
    .Cells(6, x + 3).Resize(UBound(c)) = Application.Index(c, 0, 2)
    End With
End Sub

 

  • Like 1
رابط هذا التعليق
شارك

اولا الف شكر على تعبك ومجهودك ربنا يجعله فى ميزان حسناتك ولكن  والله مازال نفس المشكل لا يرحل الا لشهر 12 فقط مهما غيرت فى التواريخ هو يرحل لشهر 12

رابط هذا التعليق
شارك

بعد اذن الاستاذ @محي الدين ابو البشر

اخى @فوزى فوزى

عدل السطر

For i = 1 To UBound(d, 2): d(1, i) = 1 * Split(d(1, i), "/")(0): Next
الى
For i = 1 To UBound(d, 2): d(1, i) = 1 * Split(d(1, i), "/")(1): Next

وايضا السطر

x = Application.Match(1 * Split(ws.Range("E7"), "/")(0), d, 0)
الى
x = Application.Match(1 * Split(ws.Range("E7"), "/")(1), d, 0)

عسي ان يكون طلبك ان شاء الله

  • Like 1
رابط هذا التعليق
شارك

اتوجه بالشكر والعرفان الى الاستاذ محى الدين على تعبه معى فى هذا الشيت وصبر كثير معى الف شكر فانتم اهل عطاء وهذا ليس بغريب عليكم والف شكر الى الاستاذ حسونة على التعديلات التى ادخلها الى الكود حتى اصبح يعمل بشكل جميل وممتاز الف الف شكر

  • 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