إجمالي مرات مشاهدة الصفحة

الأربعاء، 20 أبريل 2016

تكرار اسم معين بعدد محدد من المرات بناءً على خلية مجاورة Populate Data By Specific Count

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

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

بفرض أن لدينا مجموعة من الأسماء في النطاق B2:B7 ، وفي العمود المجاور عدد مرات التكرار المطلوبة لكل اسم ، بهذا الشكل


والمطلوب الحصول على النتائج بالشكل التالي :
 
أولاً الحل بمعادلة عادية
قم بوضع المعادلة التالية في الخلية E2
 =B2  

ثم قم بوضع المعادلة التالية في الخلية E3 ثم قم بسحبها للأسفل
 =IFERROR(IF(COUNTIF($E$2:E2,E2)<INDEX($C$2:$C$7,MATCH(E2,$B$2:$B$7,0)),E2,INDEX($B$2:$B$7,MATCH(E2,$B$2:$B$7,0)+1)),"")  
ولكن هذه المعادلة بها قصور إذا كان أحد الأسماء في الخلية المجاورة لها القيمة تساوي صفر ، ولحل الإشكالية يمكنك الاعتماد على الحل الثاني
ثانياً الحل بمعادلة صفيف :
قم بوضع المعادلة التالية في الخلية G2 ، وهي معادلة صفيف أي بعد إدخال المعادلة يتم الضغط على Ctrl + Shift + Enter
 =IF(ROW()-ROW($A$2)<=SUM($C$2:$C$7)-1,INDEX($B$2:$B$7,MATCH(FALSE,COUNTIF($G$1:G1,$B$2:$B$7)=$C$2:$C$7,0)),"")  

ثالثاً الحل بالأكواد :
قم بوضع الكود التالي في موديول عادي Standard Module ، ونفذ الكود ستظهر النتائج في العمود I بدايةً من الصف الثاني أي بدايةً من الخلية I2 ، ويمكن تحديد مكان النتائج من السطر الأخير بالكود.
Sub Test()
    Dim arResult() As String
    Dim I As Long, J As Long, Cnt As Long
    
    ReDim arResult(Application.Sum(Range("C2:C" & Range("C" & Rows.Count).End(xlUp).Row)) - 1)
    
    For I = 2 To Range("A" & Rows.Count).End(xlUp).Row
        For J = 0 To Range("C" & I).Value - 1
            arResult(Cnt + J) = Range("B" & I).Value
        Next
        Cnt = Cnt + J
    Next I
    
    Range("I2").Resize(UBound(arResult) + 1, 1).Value = Application.Transpose(arResult)
End Sub

إعداد / ياسر خليل أبو البراء

ليست هناك تعليقات:

إرسال تعليق