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

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

قام بنشر

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

 

لدي هذا الجدول:

المجموع تفاح برتقال  موز مشمش بطيخ عنب كمثرى
20   4 7   9    
10 3     3   4  
8   6     2    
17     10     7  

 

وأريد أن أستخرج العدد الأول ونوعه ثم العدد الثاني ونوعه ثم الثالث ونوعه

كما في الجدول التالي:

العدد نوع الفاكهة العدد الثاني نوع الفاكهة العدد الثالث نوع الفاكهة المجموع
4 برتقال  7 موز 9 بطيخ 20
             

=INDEX(L$6:R$6,MATCH(TRUE,INDEX(L6:R6<>0,),0))

وصلح الحال مع العدد الأول

 

المشكلة في العدد الثاني كيف استخرجه مع تجاهل العدد الأول الذي استخرجته سابقاً وهكذا

مرفق الجداول

 

سؤال خارج الموضوع: هل يوجد مكتبة دوال مع شرحها باللغة العربية؟؟

المشكلة التي تواجهني دائماً ،، لا أعرف أي دالة يفترض أن أستخدمها أو أتعلمها فيما أريد.

جزاكم الله عنا خير الجزاء

Book1.zip

قام بنشر

تحياتى لك أخى و حبيبى ياسر

الحل المقدم من حضرتك أكثر من رائع 

تم اضافة جمع الاصناف فى كل صف  

استفسار أستاذى الفاضل حاولت استخدام المصفوفات  فـ  :wub:   كيف استخدم  المصفوفات فى حاجة زى كده  ؟
 

 

استخراج الحقول ذات القيم بالترتيب وتجاهل الخلايا الفارغة.rar

  • Like 1
قام بنشر

أخي الغالي مختار حسين

تفضل باستخدام المصفوفات

Sub Using_Arrays()
    Dim Arr         As Variant
    Dim Temp        As Variant
    Dim I           As Integer
    Dim J           As Integer
    Dim P           As Integer
    Dim Cnt         As Integer
    Dim tSum        As Double

    Range("C6:I9").ClearContents

    Arr = Range("L5:R9").Value
    ReDim Temp(1 To UBound(Arr, 1), 1 To UBound(Arr, 2) + 1)

    For I = 2 To UBound(Arr, 1)
        Cnt = 0: tSum = 0
        For J = LBound(Arr, 2) To UBound(Arr, 2)
            If Not IsEmpty(Arr(I, J)) Then
                Temp(I - 1, Cnt + 1) = Arr(I, J)
                Temp(I - 1, Cnt + 2) = Arr(1, J)

                tSum = tSum + Arr(I, J)
                P = P + 1
                Cnt = Cnt + 2
            End If
        Next J
        Temp(I - 1, UBound(Temp, 2) - 1) = tSum
        Cnt = Cnt + 2
    Next I

    Range("C6").Resize(UBound(Temp, 1), UBound(Temp, 2)).Value = Temp
End Sub

 

 

  • Like 3
قام بنشر

ما شاء الله عليك أستاذى سلمت يمينك  ابا البراء

أنا أغبطك  بجد     (  العين عليها حارس لربما حد يفتكرها حاجة تانى )      :wavetowel:

  • Like 1
قام بنشر
1 دقيقه مضت, مختار حسين محمود said:

ما شاء الله عليك أستاذى سلمت يمينك  ابا البراء

أنا أغبطك  بجد     (  العين عليها حارس لربما حد يفتكرها حاجة تانى )      :wavetowel:

جزاكم الله خيراً أخي الغالي مختار .. والغبطة محمودة في العلم
وكلنا نتعلم من بعضنا البعض ، فكلنا طلاب علم ولسنا بعلماء

(بس تعرف أحلى حاجة ايه؟! إني أول واحد أستقبلك :wink2: رغم إني مش من رواد المكان باستمرار ..لكن سبحان الله شاء الله ذلك ، وما شاء الله كان)

  • Like 1
قام بنشر (معدل)

ماشاء الله ، بارك الله فيكم وفي علمكم

حاولت التعديل ولم أستطع لأجعله يحسب أكثر من 3 

في حال أردت الزيادة مثلاً كيف أضيف سطر برمجي إضافي

أو إن أمكن شرح الكود أو توضيح ما هي الأرقام التي يلزمني تغييرها

الملف مرفق

try.zip

تم تعديل بواسطه لعيونك
قام بنشر

أضف ورقة عمل جديدة ثم جرب الكود التالي

Sub Using_Arrays()
    Dim Arr         As Variant
    Dim Temp        As Variant
    Dim I           As Integer
    Dim J           As Integer
    Dim P           As Integer
    Dim Cnt         As Integer
    Dim tSum        As Double

    Sheet1.Range("B3:L1000").ClearContents

    Arr = Sheet1.Range("O2:AT143").Value
    ReDim Temp(1 To UBound(Arr, 1), 1 To UBound(Arr, 2) * 2 + 1)

    For I = 2 To UBound(Arr, 1)
        Cnt = 0: tSum = 0
        For J = LBound(Arr, 2) To UBound(Arr, 2)
            If Not IsEmpty(Arr(I, J)) Then
                Temp(I - 1, Cnt + 1) = Arr(I, J)
                Temp(I - 1, Cnt + 2) = Arr(1, J)

                tSum = tSum + Arr(I, J)
                P = P + 1
                Cnt = Cnt + 2
            End If
        Next J
        Temp(I - 1, UBound(Temp, 2) - 1) = tSum
        Cnt = Cnt + 2
    Next I

    Sheet2.Range("A1").Resize(UBound(Temp, 1), J * 2 - 1).Value = Temp
End Sub

ستوضع النتائج في ورقة العمل الجديدة

والمجموع في العمود رقم 64 في الورقة الجديدة

قام بنشر

بارك الله فيكم

بقي أنه لما ينسخ للورقة الجديدة لا ينسخ عمود الأسماء (Name01, Name02) ليتم الربط بين الأسماء والأرقام

هل بالإمكان إضافة الأسماء كعمود أول قبل سحب القيم

 

قام بنشر

السلام عليكم 

تمكن قوي في المصفوفات وعمل قمة في الروعة 

بس اي استفسار وطلب

 

الاستفسار هو 

ما فائدة هذا السطر 

P = P + 1

اما الطلب 

 

فهو شرح مفصل لطريقة عمل المصفوفة في الكود 

 

وشكراً من القلب

  • Like 1
قام بنشر

وعليكم السلام أخي الحبيب عبد الله

الوقت لا يسعني الآن للشرح وإن شاء الله إذا تيسر لي الوقت سأحاول الشرح ..

قمت بعمل حلقة تكرارية كمرحلة مبدئية في أول الكود حيث تم استخدام المتغير P لمعرفة عدد الأرقام التي سيتم التعامل معها في كل صف من صفوف المصفوفة

وبعد الانتهاء من الحلقة التكرارية يتم عقد مقارنة بين المتغير P ومتغير آخر باسم Counter فإذا كان الأول أكبر من الثاني فإن المتغير Counter يساويه في هذه الحالة

وهكذا في كل الحلقات إلى أن أعرف في نهاية المطاف أكبر قيمة للمتغير Counter ، والذي على أساسه سيتم تحديد أبعاد المصفوفة (البعد الثاني الخاص بالأعمدة) مضاف إليه عمودين آخرين أحدهما للاسم والآخر لجمع القيم

ويتم ضرب المتغير Counter * 2 وذلك لأن كل رقم مرتبط بالعنوان الخاص به في أول صف للمصفوفة ..إذاً كل رقم سيوضع في عمودين عمود للرقم والآخر للعنوان المرتبط به

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